【问题标题】:How to enable button on Main Window when secondary window is closing or get closed? - WPF VB.NET辅助窗口关闭或关闭时如何在主窗口上启用按钮? - WPF VB.NET
【发布时间】:2016-02-26 22:47:52
【问题描述】:

我有两个窗口。主窗口和窗口 1。

在主窗口中,有一个按钮 1。单击它时,它会被禁用并打开 Window1。但是当 Window1 关闭或关闭时,我想在主窗口上启用 button1。

【问题讨论】:

  • 你应该为wpf添加一个标签,而不是为c#添加标签

标签: wpf vb.net


【解决方案1】:

在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 按钮 然后你可以随心所欲地控制它。

【讨论】:

    【解决方案2】:

    我猜你正在使用 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。
    • 不,它不是 WinForms。正如我在我的问题中提到的。我想在 WPF 中执行此操作。
    • 另一方面,我认为在 WPF 中为 Closing 和/或弹出窗口的 Closed 事件设置事件处理程序非常相似 (stackoverflow.com/questions/10018308/…)。
    【解决方案3】:

    数据绑定是WPF中最强的工具: 添加按钮并将 IsEnabled 属性绑定到视图模型或后面的代码中的公共属性。在辅助窗口中 - 关闭时 - 更新属性以反映新状态。

    不要忘记实现 INotifyPropertyChanged

    【讨论】:

    • 你能不能写一些代码。我是编程初学者,所以我听不懂你说的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多