0

フォーム (Form1) に ListBoxControl があり、その下に別のフォーム (Form2) を表示したいボタンがあります。

Form2 には TextBox とボタンがあり、このボタンをクリックすると、TextBox の現在のテキストが、他のフォーム Form1 にある ListBoxControl に追加されます。

どうやってやるの ?

フォーム 1 :

フォーム1

フォーム 2 :

FORM2

4

4 に答える 4

1

(ヘンクによって提案された)ダイアログ結果を使用したくないが、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);
        }
    }
}
于 2012-09-19T12:31:40.573 に答える
1

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);
}
于 2012-09-19T11:46:13.863 に答える
1

ダイアログを使用するための標準パターンがあります。

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
    }
}
于 2012-09-19T11:47:45.327 に答える
1

他のフォームでこのコードを使用します。

  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);
  }
于 2012-09-19T11:41:43.077 に答える