c#从其他形式获取值

问题描述

| 我遇到的情况:在form1上的文本框(输入您的姓名)。从按钮上的form1单击“我”进入form2。从form2按钮单击到form3。在单击按钮的form3上,我需要在用户写下的form1上的文本框中输入空文本框值。 示例:在textBox1的form1上,我写下我的名字\“ Djuzla \”。当我转到form3并单击按钮以查看我在form1中写的名称时,它应显示在空的textBox3 form3 \“ Djuzla \”中。 我现在已经呆了几个小时,这是个愚蠢的问题,但是我不知道下一步该怎么做..从网上的zillion theards尝试了所有方法:p     

解决方法

        您可以修改表单的构造函数以使用另一个参数来保存textBox的值。     ,        将值存储在属性中。如果您正在开发asp.net,请使用session或ViewState。我明白你的问题吗?     ,        您可以从页面访问PreviousPage属性,或者设置会话变量(或cookie),然后在页面加载等情况下检索它。但是最直接的解决方案是使用页面上的PreviousPage属性访问上一页的数据。 。     ,        我已经回答了类似的问题...由于您是从表格1到表格2到表格3,因此您基本上可以在此解决方案中采用相同的方法来按需层叠价值,而不仅仅是一种方式... 我对类似问题的其他解决方案...     ,        传递值的解决方案可能会变得很草率,因为无法保证文本框内的值在传递到某个地方后不会改变。相反,传递一个函数比较明智,该函数可以在调用时解析TextBox中的值,这将导致始终获得最新的值。
void button1_Click() {
    form2 = new Form2(() => textBoxName.Text);
}

class Form2 : Form {
    ...
    public Form2(Func<String> nameResolver) {
        form3 = new Form3(nameResolver);
    }

    void button1_Click(...) {
       form3.Show()
    }
}

class Form3 : Form {
    Func<String> nameResolver;

    public Form3(Func<string> nameResolver) {
        this.nameResolver = nameResolver;
    }

    void button1_Click(...) {
        this.textBoxName = nameResolver.Invoke();
    }
}
如果最终需要在多个表单之间共享多个组件,则最好将表单本身传递给子表单。例如。
void button1_Click(...) {
    form2 = new Form2(this);
}

class Form2 : Form {
    Form1 parent;
    public Form2(Form1 parent) {
        this.parent = parent;
    }

    void button1_Click(...) {
        form3 = new Form3(parent);
    }
}