【发布时间】:2016-02-26 22:47:52
【问题描述】:
我有两个窗口。主窗口和窗口 1。
在主窗口中,有一个按钮 1。单击它时,它会被禁用并打开 Window1。但是当 Window1 关闭或关闭时,我想在主窗口上启用 button1。
【问题讨论】:
-
你应该为
wpf添加一个标签,而不是为c#添加标签
我有两个窗口。主窗口和窗口 1。
在主窗口中,有一个按钮 1。单击它时,它会被禁用并打开 Window1。但是当 Window1 关闭或关闭时,我想在主窗口上启用 button1。
【问题讨论】:
wpf添加一个标签,而不是为c#添加标签
在Window1中创建一个公共按钮
public Button mainBtn ;
在mainWindow上的按钮点击事件
private void button_click(object sender , RoutedEventArgs e){
Window1 win = new Window1();
this.button.IsEnabled = false;
win.mainBtn = this.button;
win.Show();
}
将关闭事件添加到 Window1
private void Window_closing(object sender , CancelEventArgs e){
mainBtn.IsEnabled = true;
}
这个想法是将 MainWindow 按钮传递给 Window1 按钮 然后你可以随心所欲地控制它。
【讨论】:
我猜你正在使用 WinForms。在这种情况下,您有一个用于单击 button1 的事件处理程序:
private void OnButton1Clicked(object sender, ...)
{
// show window 1
}
现在有两种显示表单的方法。您可以将其显示为无模式对话框或模式对话框。
您看到的大多数对话框都是模态的:如果您按文件保存,则必须先完成“保存-文件-对话框”才能继续编辑。
模态对话框是最简单的 - 使用 Form.ShowDialog 显示它们。 - ShowDialog 在窗体关闭时返回。
如果您使用模式对话框,您的代码将看起来是连续的:
private void OnButton1Clicked(object sender, ...)
{
using (Window1 window1 = new Window1())
{
// if needed window1.SetValues...
var dlgResult = window1.ShowDialog(this);
// if here, window 1 is closed
if (dlgResult = DialogResult.OK)
{ // ok button pressed
// if needed: window1 read resulting values
}
} // because of using window 1 automatically disposed
}
但是,如果 window1 显示为无模式对话框,则 window1 将不得不告诉其他人它已关闭。使用事件 Form.Closed:
private Window1 window1 = null;
private void OnButton1Clicked(object sender, ...)
{
if (this.window1 != null) return; // window1 already shown
this.window1 = new Window1())
this.window1.Closing += this.OnFormClosed;
}
private void OnFormClosed(object sender, FormClosedEventArgs e)
{
Debug.WriteLine("window1 closed");
if (this.window1.DialogResult = DialogResult.OK)
{
// process dialog results
}
this.window1.Dispose();
this.window1 = null;
}
【讨论】:
数据绑定是WPF中最强的工具: 添加按钮并将 IsEnabled 属性绑定到视图模型或后面的代码中的公共属性。在辅助窗口中 - 关闭时 - 更新属性以反映新状态。
不要忘记实现 INotifyPropertyChanged
【讨论】: