日期:2014-05-17  浏览次数:20811 次

关于不同窗体间TEXTBOX控件传值的问题
例如form1窗体中textbox1输入的值 如何在form2的窗体代码中使用?

我目前的用法

1.设置TEXTBOX1的修改属性为public
2在 form2的公用代码区域定义 form1 ob_fom1 = new form1  
应用ob_fom1.textbox1.text值的方式来去TEXTBOX1的值  结果去到的值为空!!


3.我在textbox1的text属性设置为为某个值时, 上面的方法能实现取值, 但是调试程序时输入的值 为什么不能取呢?


请高人解答 谢谢!
------最佳解决方案--------------------
你观察一下就会发现,Form1的构造函数中调用了一个方法,InitializeComponent(),而你直接设置默认值的话将在InitializeComponent中生成一些赋值的代码。
所以你new From1的时候其实调用了这个赋值的代码,所以可以取到值。

而运行时,你在修改Form1的TEXTBOX1的值的时候,是修改的form1当前实例对象中的值。
而你在form2种,重新new出来的form1当然不会随着更改了。因为你new的对象和当前运行中的对象是2个不同的对象。

Form1中:
            Form2 f2 = new Form2();
            
f2.Owner = this;

            f2.Show();

Form2中:
            Form1 f1 = this.Owner as Form1;
            string str = f1.textBox1.Text;

需要把Form1中textbox1的Modifiers设置为公开。


------其他解决方案--------------------

在 form2的公用代码区域定义 form1 ob_fom1 = new form1  
应用ob_fom1.textbox1.text值的方式来去TEXTBOX1的值  结果去到的值为空!!
=====================================

根据你的描述,我只能认为你每次都重新new了一个form,所以每次都新的控件
------其他解决方案--------------------
form中打开form2事件

form2 f=new form2();
f.txt=textbox1.Text;
f.show();

form2中
public string txt{get;set;}
在form2中使用txt就可以了,,
------其他解决方案--------------------
我觉得也是这样  关于这个new了一个form  比如 form1  form2 form3  
我是否需要在  每个窗体的公用代码区域 form1 中 new   form2 form3  
form2中 new   form1 form3  
form3 中 new   form1 form2  
------其他解决方案--------------------
为什么我直接写在属性里的值 在别的窗体调用就没问题呢?