DOBON.NET DOBON.NETプログラミング掲示板過去ログ

別のフォームに値を表示したい

環境/言語:[XP,C#]
分類:[.NET]

最初に立ち上げたMainWin(フォーム)から別のMenuWin(フォーム)にマウスのどのボタンが押されたかをMenuWinのTextBox1に表示させたいのですが、上手く行きません
VB6はわかるのですが、C#は初心者なので凄い簡単なことなのかも・・・

どなたかわかる方がいましたらお願い致します


public partial class MainWin : Form
{
public MainWin()
{
InitializeComponent();

//MenuWinをモードレスで表示する
MenuWin Menu = new MenuWin();
Menu.Show();

}

protected override void OnMouseDown(MouseEventArgs e)
{

MenuWin c = new MenuWin();

//現在どのマウスボタンが押されているか調べる
if ((Control.MouseButtons & MouseButtons.Left) ==
MouseButtons.Left)
{

c.SetValue("左");
}
if ((Control.MouseButtons & MouseButtons.Right) ==
MouseButtons.Right)
{

c.SetValue("右");
}
if ((Control.MouseButtons & MouseButtons.Middle) ==
MouseButtons.Middle)
{
c.SetValue("中央");
}


}

public partial class MenuWin : Form
{


public MenuWin()
{
InitializeComponent();
}

//publicメソッド
public void SetValue(string val)
{

this.textBox1.Text = val;

}

}
new 式は、文字通り新しい実体(インスタンス)を作成します。
つまり、このコードでは Show される実体と SetValue される実体が異なるのです。
一般的には、他のメソッドでも使う予定のものは、インスタンスの作成時にフィールドに保存しておきます。
他のメソッドではそのフィールドに対して操作を行います。
■No20145に返信(Hongliangさんの記事)
> new 式は、文字通り新しい実体(インスタンス)を作成します。
> つまり、このコードでは Show される実体と SetValue される実体が異なるのです。
> 一般的には、他のメソッドでも使う予定のものは、インスタンスの作成時にフィールドに保存しておきます。
> 他のメソッドではそのフィールドに対して操作を行います。

>Hongliangさん
確かにそうでした
でも、知識が無くて、newする方法でしかMenuWinにあるSetValueを呼ぶ方法を知りません
どうしたら使えるようになるんですか?
> MenuWin Menu = new MenuWin();
> Menu.Show();

> MenuWin c = new MenuWin();

次のようにして試してみてください。

MenuWin Menu1 = new MenuWin();
Menu1.Show();
MenuWin Menu2 = new MenuWin();
Menu2.Show();

これで、c が何なのかがわかるはずです。
■No20147に返信(まどかさんの記事)
>> MenuWin Menu = new MenuWin();
>> Menu.Show();
>
>> MenuWin c = new MenuWin();
>
> 次のようにして試してみてください。
>
> MenuWin Menu1 = new MenuWin();
> Menu1.Show();
> MenuWin Menu2 = new MenuWin();
> Menu2.Show();
>
> これで、c が何なのかがわかるはずです。

>まどかさん
返信ありがとうございます
確かにcは別の物と言うことがわかりましたが、どうしたら別のフォームに設定できるのでしょうか?
横から割り込んで、かえって混乱させてしまうかもしれませんが(そうであれば、無視してください)、下記のページが参考になるかと思います。

別のフォームのデータを取得、設定する
http://dobon.net/vb/dotnet/form/accessanotherformdata.html
■No20149に返信(管理人さんの記事)
> 横から割り込んで、かえって混乱させてしまうかもしれませんが(そうであれば、無視してください)、下記のページが参考になるかと思います。
>
> 別のフォームのデータを取得、設定する
> http://dobon.net/vb/dotnet/form/accessanotherformdata.html
>

>管理人さん
ありがとうございます
教えて頂いたところの
「インスタンスを作成したときに、フィールドに代入しておく」
を参考にして無事設定することができました

またわからないところがありましたら、宜しくお願い致します
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板