所以我有一个主窗口,里面有很多其他窗口实例
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实例
请问一些在主窗口中清除文本框的方法吗?我应该把这个方法放在哪里
答案 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 = "";
即可获得对父母的引用。
这一切都假设Window1
和Window2
实际上是Window
的子类,或者您实际上是要将win1
和win2
声明为Window
编辑:
正如评论中所提到的,如果MainWindow
和win1
的构造函数是win2
的构造函数(如果它们是通过新的窗口的子类),则可以选择提供对MainWindow
的实例的引用构造
我还建议您在名为ClearText
的{{1}}上创建一个新方法,这样您就不必公开文本框名称。