主窗口文本框从另一个文件中的类访问

时间:2013-01-26 08:13:18

标签: c# .net wpf

所以我有一个主窗口,里面有很多其他窗口实例

MainWindow
{
    Window1 win1= new Window1();
    Window2 win2 = new Window2();
    // ....... and so on 

    private keydownevent(  ,key e)
    {  
        if(e.keu==key.return)
        {
            //some logic here
            if(some condition)
            {
                win1.show();
            }
            else if(some condition)
           {
                win2.show()
           }
           // ....
        }
    }
}
// and in window1 lets say 
Window1
{
    foo_class fcl = new foo_class();
    click_button()
    {
        // do some logic
        fc1.function in class;
    }
 }

现在文本框内容是条形码,我想在显示window1并在窗口1中完成click_button时清除MainWindow中的文本框

////////// 我试过了

          MainWindow win= (MainWindow)Application.Current.MainWindow;
             win.txtBlock1.Text = ""; 

放入foo_class以及button_click但是它抛出错误window1无法强制转换为mainwindow

我也试过

创建一个构造函数,将参数作为文本框在keydown函数中作为窗口(texbox)但是每次都会创建一个新实例,但我只想在实例化mainwindow时创建实例并继续使用该window1实例

请问一些在主窗口中清除文本框的方法吗?我应该把这个方法放在哪里

1 个答案:

答案 0 :(得分:0)

创建Window时,您可以将Owner设置为this。即:

public class MainWindow
{
    Window1 win1 = new Window1();
    Window2 win2 = new Window2();

    ...

    //in code, before call Show() on win1 or win2
    //set win1/win2.Owner = this;
}

然后当您需要清除父母时,只需拨打((MainWindow)this.Owner).txtBlock1.Text = "";即可获得对父母的引用。

这一切都假设Window1Window2实际上是Window的子类,或者您实际上是要将win1win2声明为Window

编辑:

正如评论中所提到的,如果MainWindowwin1的构造函数是win2的构造函数(如果它们是通过新的窗口的子类),则可以选择提供对MainWindow的实例的引用构造

我还建议您在名为ClearText的{​​{1}}上创建一个新方法,这样您就不必公开文本框名称。