0

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

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 can't be cast to mainwindow

我也试过

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

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

4

1 回答 1

0

创建Windows 时,您可以将 设置Ownerthis。IE:

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 = "";

这一切都假设Window1andWindow2实际上是 的子类Window,或者您实际上打算将win1and声明win2为 Window。

编辑:

MainWindow如评论中所述,另一种方法是通过新的构造函数提供对构造函数的实例的引用,win1并且win2如果它们是 window 的子类。

我还建议您在MainWindow调用时创建一个新方法,ClearText这样您就不必公开文本框名称。

于 2013-01-26T08:28:30.350 回答