0

この質問は、次の質問へのフォローアップです: リストボックス内の項目をダブルクリックした後、C# テキストが別のフォームに表示されない

これで、form3 のテキスト ボックスに値を入力しました。form3で「OK」を押した後、値をform1に戻してlistbox10に表示するにはどうすればよいですか? 以下は私のform3コーディングですが、うまくいきません:

private void button1_Click(object sender, EventArgs e)
{   
    //This is the coding for "OK" button.
    int selectedIndex = listBox10.SelectedIndex;
    listBox10.Items.Insert(selectedIndex, textBox1.Text);
}
4

3 に答える 3

1

form3 にパブリック プロパティを配置できます。

public partial class form3 : Form
{
    public String SomeName
    {
        get
        {
            return textbox1.Text;
        }
    }

    ...
    private void buttonOK_Click(object sender, EventArgs e)
    {
        DialogResult = DialogResult.OK;
        Close();
    }

    private void buttonCancel_Click(object sender, EventArgs e)
    {
        DialogResult = DialogResult.Cancel;
        Close();
    }
 }

form3 を開いている form1 で、ShowDialog の後に次のように記述します。

if (form3.ShowDialog() == DialogResult.OK)
{

    int selectedIndex = listBox10.SelectedIndex;

    if (selectedIndex == -1) //listbox does not have items
        listbox10.Add(form3.SomeValue);
    else
        listBox10.Items.Insert(selectedIndex, form3.SomeName);
}
于 2012-10-09T10:02:08.310 に答える
0

そのようなことをしてください:

//form1:
public void add(int num)
{
  //add num to the list box.
}

これで、form3はコンストラクターでform1のインスタンスを取得し、それを保存する必要があります。

//in form3:
private form form1_i
public form3(form i_form1)
{
  .
  .
  .
 form1_i = i_form1;
}

form3のボタンクリックでadd、form1の関数を呼び出します。

于 2012-10-09T10:00:49.433 に答える
0

これが最も安全な方法です。実際、Windows Mobile で作業している場合、これがアプリケーションをクラッシュさせない唯一の方法です。デスクトップ バージョンでは、デバッグ バージョンでクラッシュする可能性があります。

 public partial class Form1 : Form
{
    public string name = "something";
    public Form1()
    {
        InitializeComponent();
    }

    public delegate void nameChanger(string nme);
    public void ChangeName(string nme)
    {
        this.name = nme;
    }
    public void SafeNameChange(string nme)
    {
        this.Invoke(new nameChanger(ChangeName), new object[] { nme });
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Form3 f3 = new Form3(this);
        f3.Show();
    }

}

public partial class Form2 : Form
    {
        Form1 ff;
        public Form2(Form1 firstForm)
        {
            InitializeComponent();
            ff = firstForm;
        }

    private void button2_Click(object sender, EventArgs e)
    {
        ff.SafeNameChange("something different from the Form1");
        this.Close();
    }
}
于 2012-10-09T10:09:16.383 に答える