フォーム (Form1) に ListBoxControl があり、その下に別のフォーム (Form2) を表示したいボタンがあります。
Form2 には TextBox とボタンがあり、このボタンをクリックすると、TextBox の現在のテキストが、他のフォーム Form1 にある ListBoxControl に追加されます。
どうやってやるの ?
フォーム 1 :
フォーム 2 :
(ヘンクによって提案された)ダイアログ結果を使用したくないが、2番目のフォームを開いたままにしておきたい場合は、次のことを試してください。つまり、リストボックスアイテムを追加するときに2番目のフォームを開いたままにしておきたい場合。
フォーム1:
using System;
using System.Windows.Forms;
namespace FormComm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2(this);
form2.Show();
}
delegate void AddListBoxItemCallback(string text);
public void AddListBoxItem(object item)
{
if (this.InvokeRequired)
{
AddListBoxItemCallback callback = new AddListBoxItemCallback(AddListBoxItem);
this.Invoke(callback, new object[] { item });
}
else
{
this.listBox1.Items.Add(item);
}
}
}
}
フォーム2:
using System;
using System.Windows.Forms;
namespace FormComm
{
public partial class Form2 : Form
{
private Form1 _form = null;
public Form2(Form1 form)
{
InitializeComponent();
this._form = form;
}
private void button1_Click(object sender, EventArgs e)
{
_form.AddListBoxItem(textBox1.Text);
}
}
}
form1でパブリックメソッドを作成できます。
public SampleMethodName(string Value)
{
// Write your code to add it the list.
ListBox1.Add(Value);
}
これで、ユーザーがform2を開き、テキストボックスにテキストを追加して、有効なボタンを押すと、form1のインスタンスを作成できます。
protected void valider_click(object sender, eventargs e)
{
Form1 frm = new Form1();
frm.SampleMethodName(TextBox.Value);
}
ダイアログを使用するための標準パターンがあります。
Form2 で、コントロールを読み取るためのプロパティを提供します。
public string KeyWord
{
get { return Textbox1.Text; }
}
Form1 で、ボタンがクリックされると:
using (Form2 dialog = new Form2())
{
// init Form2
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
{
sting newKeyWord = dialog.KeyWord;
// add to listbox
}
}
他のフォームでこのコードを使用します。
Form1 frm;
if ((frm= (Form1 )IsFormAlreadyOpen(typeof(Form1))) != null)
{
//get the value of the form
//frm.listboxcontrol.text
}
public static Form IsFormAlreadyOpen(Type FormType)
{
return Application.OpenForms.Cast<Form>().FirstOrDefault(OpenForm => OpenForm.GetType() == FormType);
}