在表单之间传递数据

Afn*_*hir 11 c# winforms

我有两种形式.首先,Form1有一个组框,一些标签和一个列表框.我按下一个按钮,Form2打开新的并包含一些文字.我想将文本传输Form2到列表框中Form1.

到目前为止,我所做的是将listbox的修饰符设置为public,然后将此代码放在按钮中Form2

Form1 frm = new Form1();
frm.ListBox.items.Add(textBox.Text);
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是,这并没有增加任何价值.我以为我错了插入所以我做了同样的程序.这一次,我公开了一个标签,并在其Text属性中添加了文本框值,但它失败了.

有任何想法吗?

Bra*_*tie 15

尝试将参数添加到第二个表单的构造函数(在您的示例中为Form1)并以该方式传递值.调用InitializeComponent()后,您可以将参数作为选项添加到列表框中.

public Form1(String customItem)
{
  InitializeComponent();
  this.myListBox.Items.Add(customItem);
}

// In the original form's code:
Form1 frm = new Form1(this.textBox.Text);
Run Code Online (Sandbox Code Playgroud)


par*_*agy 6

下面的代码在我的机器上完美运行。

private void button1_Click(object sender, EventArgs e)
{
    Form1 f1 = new Form1();
    f1.listBox1.Items.Add(textBox1.Text );//ListBox1 : Modifier property made public
    f1.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)

好的,如果你在调用 Sequence 就像 Form1->Form2 和 Form2 更新 Form1 的值,那么你必须使用ParentForm () 或Delegate来更新以前的表单。


小智 6

让我们假设 Form1 调用 Form2。请看代码:

表格1:

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.Show();
        frm.VisibleChanged += formVisibleChanged;


    }

    private void formVisibleChanged(object sender, EventArgs e)
    {
        Form2 frm = (Form2)sender;
        if (!frm.Visible)
        {
            this.listBox1.Items.Add(frm.ReturnText);
            frm.Dispose();
        }


    }

}
Run Code Online (Sandbox Code Playgroud)

表格2:

 public partial class Form2 : Form
{

    public string ReturnText { get; set; }

    public Form2()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.ReturnText = this.textBox1.Text;
        this.Visible = false;

    }


}
Run Code Online (Sandbox Code Playgroud)

答案是在 Form2 上声明公共属性以及何时隐藏表单。访问同一个实例并检索值。


mbe*_*ish 4

Form1 frm = new Form1();
Run Code Online (Sandbox Code Playgroud)

frm 现在是 Form1 类的新实例。

frm 并不引用向用户显示的 Form1 的原始实例。

一种解决方案是,在创建 Form2 的实例时,向其传递对当前 Form1 实例的引用。