winform中,如何通过点击一个窗体的按钮获取到另一个窗体中随时改变的textbox的值

时间:2022-04-03 19:46:27
窗体A有一个textbox,里面的数据在运行时随时可能改动.
另一个窗体B是A的子窗体,我希望能点击B窗体的"获取"button获取到A窗体textbox中现在的值是多少,应当怎么做呢?

5 个解决方案

#1


获取父窗体(有函数自己百度查一下)
然后获取父窗体的这个textbox值

还有一个办法
直接将textbox的对象传给子窗体,不过不建议

#2


textbox 的 Modifires 属性 改为public

直接 Forma fa = new Forma ();
var str = fa.textbox.tex ;

#3


建议A窗体定义一个GetText方法,该方法内获取textbox的text值:return textbox.text     子窗体想调用这个方法需获取父窗体的引用,至少是需要在实例化时,由父窗体传递给子窗体,即new B(this),这样一个引用的传递。

#5


感谢各位的回答
@a407790089 和@LOVLC 的方法在普通的父窗体和子窗体的建立中确实可行.但我的情况是在开始父窗体与子窗体就已经初始化完毕了,如果只是改了Modifires 属性,在new时会被初始化,导致当父窗体的textbox值改变时获取不到.
而我不想把整个父窗体的引用传递过去,如@trh138320 所言那样所以才寻找一个别的解决方式.
看了@crystal_lz 的传送门的委托事件那篇文章与我的想法有些相同,经过早上我的捣鼓已经有了解决的方式.在此放出来也给同由此疑问的人一个解决方法:
首先A窗体与B都已经初始化,A为父,B为子,B需要获取A的控件内容.在B里定义了一个委托,并在初始化中把一个方法赋值给它:

public delegate void myDelegate(string tboxValue);
public static myDelegate test;
private string testValue = "";
public ClientNameForm()
        {
            InitializeComponent();
            testEvent = setTBoxValue;
        }
private void setTBoxValue(string tboxValue)
        {
           testValue = tboxValue;
        }

在A中,只需在数值改变时触发:

if (ClientNameForm.testEvent != null)
    BForm.test(this.textbox.text);

即可.

#1


获取父窗体(有函数自己百度查一下)
然后获取父窗体的这个textbox值

还有一个办法
直接将textbox的对象传给子窗体,不过不建议

#2


textbox 的 Modifires 属性 改为public

直接 Forma fa = new Forma ();
var str = fa.textbox.tex ;

#3


建议A窗体定义一个GetText方法,该方法内获取textbox的text值:return textbox.text     子窗体想调用这个方法需获取父窗体的引用,至少是需要在实例化时,由父窗体传递给子窗体,即new B(this),这样一个引用的传递。

#4


#5


感谢各位的回答
@a407790089 和@LOVLC 的方法在普通的父窗体和子窗体的建立中确实可行.但我的情况是在开始父窗体与子窗体就已经初始化完毕了,如果只是改了Modifires 属性,在new时会被初始化,导致当父窗体的textbox值改变时获取不到.
而我不想把整个父窗体的引用传递过去,如@trh138320 所言那样所以才寻找一个别的解决方式.
看了@crystal_lz 的传送门的委托事件那篇文章与我的想法有些相同,经过早上我的捣鼓已经有了解决的方式.在此放出来也给同由此疑问的人一个解决方法:
首先A窗体与B都已经初始化,A为父,B为子,B需要获取A的控件内容.在B里定义了一个委托,并在初始化中把一个方法赋值给它:

public delegate void myDelegate(string tboxValue);
public static myDelegate test;
private string testValue = "";
public ClientNameForm()
        {
            InitializeComponent();
            testEvent = setTBoxValue;
        }
private void setTBoxValue(string tboxValue)
        {
           testValue = tboxValue;
        }

在A中,只需在数值改变时触发:

if (ClientNameForm.testEvent != null)
    BForm.test(this.textbox.text);

即可.