WPF:如何将线程中的文本框文本传递到主窗口

本文关键字:文本 窗口 线程 WPF | 更新日期: 2023-09-27 18:35:29

窗口窗体使用线程技术创建的chlid窗口窗体中有一个子文本框控件,我想实现此功能: 在子窗口窗体中,当我单击按钮(或向下键)时,它会将文本传递到主窗口窗体。我能做些什么呢?

WPF:如何将线程中的文本框文本传递到主窗口

您需要一种方法让 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);
    }
}

快速的谷歌会带回大量的结果......

最好的办法可能是在创建 Form2(子级)时,有一个可用的公共方法,您可以在其中传入 Form1 的实例(父级),然后在 Form1 上再次传递相同的实例,但传递字符串而不是表单的实例。所以你最终会得到这样的东西:

表格 1(父级):

private void Button1_Click_ShowChildForm(args..)
{
    Form2 frm2 = new Form2();
    frm2.Show();
    frm2.GetInstance(this);
}
public void PassBack(string var)
{
    TextBox1.Text = var;
}

中二(儿童):

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 的实例,而不是声明一个单独的方法,但您明白了。