另一个窗体B是A的子窗体,我希望能点击B窗体的"获取"button获取到A窗体textbox中现在的值是多少,应当怎么做呢?
5 个解决方案
#1
获取父窗体(有函数自己百度查一下)
然后获取父窗体的这个textbox值
还有一个办法
直接将textbox的对象传给子窗体,不过不建议
然后获取父窗体的这个textbox值
还有一个办法
直接将textbox的对象传给子窗体,不过不建议
#2
textbox 的 Modifires 属性 改为public
直接 Forma fa = new Forma ();
var str = fa.textbox.tex ;
直接 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里定义了一个委托,并在初始化中把一个方法赋值给它:
在A中,只需在数值改变时触发:
即可.
@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的对象传给子窗体,不过不建议
然后获取父窗体的这个textbox值
还有一个办法
直接将textbox的对象传给子窗体,不过不建议
#2
textbox 的 Modifires 属性 改为public
直接 Forma fa = new Forma ();
var str = fa.textbox.tex ;
直接 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里定义了一个委托,并在初始化中把一个方法赋值给它:
在A中,只需在数值改变时触发:
即可.
@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);
即可.