0

我有一个表单 (form1),它有一个 ListBox 和一个按钮。单击该按钮时,它会打开另一个表单 (form2)。在这个表单中,我有一个 TexBox 和一个按钮。单击此按钮时,我在此文本框中输入的任何内容都必须进入 form1 中的列表框。请帮我找出解决方案。

4

4 回答 4

2

第 1 步:将Listbox的Modifiers属性设置为Public

第2步:在Form1的按钮点击中,放

        Form2 fm2 = new Form2(this);
        fm2.ShowDialog();

第 3 步:在 Form2 中,将以下声明放在顶层

    private Form1 _fm1;

    Also add a constructor :

    public Form2(Form1 fm1)
    {
        _fm1 = fm1;
        InitializeComponent();
    }

第 4 步:在Form2的按钮单击中,输入以下行:

 _fm1.ListBox1.Items.Add(Textbox1.Text);
  this.Close(); //close the Form2

希望这可以帮助。

于 2013-04-18T07:20:21.720 回答
0

制作 form1 的静态实例public static Form1 _Form1;,然后您可以从其他表单访问它而无需制作实例:

我写一个例子:

Form1.cs

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            _Form1 = this;
        }
        public static Form1 _Form1;
        public void AddItem(object value)
        {
            listBox1.Items.Add(value);
        }
        private void button1_Click(object sender, EventArgs e)
        {
           Form2 _Form2 = new Form2();
          _Form2.Show();
        }
    }

Form2.cs

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1._Form1.AddItem("your item");
    }
}
于 2013-04-18T07:16:04.297 回答
0

当您打开第二个表单时,传递对当前表单的引用:

var form2 = new Form2(this);
form2.Show();

在 form2 的构造函数中保存引用并在点击处理程序中使用引用

class Form2
{
    private Form1 _form1;
    public Form2()
    {
        // ...
    }

    public Form2(Form1 form1):this()
    {
        _form1 = form1;
    }

    void Button_Click(object sender, EventArgs e)
    {
        if(_form1 != null)
        {
            _form1.AddValue(textBox1.Text);
        }
    }
}

最好定义一个包含方法“AddValue”的接口,而不是使用 Form1 类型,而是使用接口:

interface IAddValues
{
    void AddValue(string value);
}

class Form1: IAddValues
{
    // ...

    public void AddValue(string value)
    {
         // ...
    }
}

    // somewhere in form1:
    var form2 = new Form2(this as IAddValues);
    form2.Show();

在 form2 的构造函数中保存引用并在点击处理程序中使用引用

class Form2
{
    private IAddValues _valueAdder;
    public Form2()
    {
        // ...
    }

    public Form2(IAddValues valueAdder):this()
    {
        _valueAdder = valueAdder;
    }

    void Button_Click(object sender, EventArgs e)
    {
        if(_valueAdder != null)
        {
            _valueAdder.AddValue(textBox1.Text);
        }
    }
}
于 2013-04-18T07:21:52.800 回答
0

将 Form1 设为 Form 2 的 Owner,然后就可以从 Form2 访问 Form1:

表格1:

private void Form1Button_Clicked(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();
}

public void AddListItem(object text)
{
    YourListBox.Items.Add(text);
}

表格2:

private void Form2Button_Clicked(object sender, EventArgs e)
{
Form1 f1 = (Form1)Owner;
f1.AddListItem(YourTextBox.Text;);
Close();
}
于 2013-04-18T07:20:01.940 回答