プロが教える店舗&オフィスのセキュリティ対策術

表題の件がうまくできず、困っています。

やりたいことは
親フォームのリストボックスで選択した
インデックス番号をshouDialog()で立ち上げた子フォーム側の
textBoxに表示したいんですが、
何も表示されず困っています。

namespace test
{
public partial class Form1 : Form
{
//リスト変数
public string listChoise;


[STAThreadAttribute]
static void Main()
{
Application.Run(new Form1());
}


public Form1()
{
InitializeComponent();
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listChoise = listBox1.SelectedIndex.ToString();
MessageBox.Show(listChoise);//←ここでは値がでます
}

    private void button1_Click(object sender, EventArgs e)
{

//子フォームを立ち上げる
Form2 form = new Form2();
form.ShowDialog();
}
}
}

↓Form2クラス
namespace test
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();

//リスト選択変数
Form1 list = new Form1();
textBox2.Text = list.listChoise;
}
}
}

この二つのクラスです。
とくにエラーはありません。

ちなみに
>>>//リスト変数
>>>public string listChoise;
の部分を
public string listChose = "aaaaa";

としておくと、
子フォームのテキストボックスに"aaaaa"と表示されているようなんですが、
>>>listChoise = listBox1.SelectedIndex.ToString();
の値がちゃんと子フォームの方で受け取れていないようです。
結果はなにもひょうじされません。
子フォームの方で、
MessageBox.Show("listChoise");をしても
何も表示されません。

どんな原因が考えられますでしょうか。
よろしくお願いします。

環境:visualC# 2008 Express Edition

A 回答 (1件)

子ダイアログから 親をアクセスしたいなら その親を取得する方法を指定しましょう



子ダイアログを表示(実行)する前に 親側から子側にデータを受け渡すなら
子側に フィールド準備しておいてそのフィールド設定してから ShowDialogを実行する
たとえな Form2側に
public string myEditData;
といったフィールドを準備して

Form2 form = new Form2();
frm.myEditData = listChoise;
form.ShowDialog();
などとして実行

Form2のLoadイベントで
textBox2.Text = myEditString;
といった具合に初期化する

--------------------------------
子側から親にアクセスするなら
frm.ShowDialog( this );
といった具合に親のオブジェクトを渡す

子側のLoadイベントで
textBox2.Text = ((Form1)this.Owner).listChoise;
といった具合に初期化してみましょう
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
初期化がしっかりとできていないみたいでした。

Loadイベントに初期化しなければならたかったんですね。
無事値が取得できました。
ありがとうございます。

お礼日時:2008/06/17 21:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!