主窗体使用线程技术创建的 chlid 窗体中有一个子文本框控件,我想实现这个功能: 在子窗体中,当我单击一个按钮(或 Enter-key-down)时,它通过文本到主窗口窗体。我能做些什么呢?
问问题
1605 次
2 回答
0
一个快速的谷歌会给你带来大量的结果......
最好的办法可能是当您创建 Form2(子)时,有一个可用的公共方法,您可以在其中传递 Form1(父)的实例,然后在 Form1 上再次传递相同的方法,但传递的是字符串而不是 a 的实例形式。所以你最终会得到这样的东西:
表格 1(父级):
private void Button1_Click_ShowChildForm(args..)
{
Form2 frm2 = new Form2();
frm2.Show();
frm2.GetInstance(this);
}
public void PassBack(string var)
{
TextBox1.Text = var;
}
表格 2(儿童):
private static Form1 _frm1;
public void GetInstance(Form1 Frm1)
{
this._frm1 = Frm1;
}
private void Button2_Click_Close(args...)
{
_frm1.PassBack(this.TextBox2.Text);
this.Close();
}
像这样的东西^^^应该可以解决问题。;)
注意。您可以稍微整理一下,如果您真的愿意,您可以重写 Form2 的 Show 方法以接受 Form1 的实例,而不是声明一个单独的方法,但您明白了。
于 2012-05-26T14:02:00.620 回答
0
您需要一种方法让ChildWindow将消息发送回MainWindow。以下示例应该很有用:
代码:
允许窗口之间“通信”的接口public interface IListner
{
void Send(String message);
}
主窗口
public partial class MainWindow : Window, IListner
{
public MainWindow()
{
InitializeComponent();
}
public void Send(string message)
{
// Read the message here.
// If this code is called from different thread, use "Dispatcher.Invoke()"
}
public void OpenAnotherWindow()
{
// Since "MainWindow" implements "IListner", it can pass it's own instance to "ChildWindow"
ChildWindow childWindow = new ChildWindow(this);
}
}
子窗口:
public partial class ChildWindow : Window
{
private IListner Listner { get; set; }
public ChildWindow(IListner listner)
{
InitializeComponent();
Listner = listner;
}
private void OnTextBoxTextChanged()
{
// This will call "Send" on "MainWindow"
Listner.Send(TextBox1.Text);
}
}
于 2012-05-26T15:40:50.693 回答