【问题标题】:How to open a same window as childwindow and when closed enable parent window?如何打开与子窗口相同的窗口并在关闭时启用父窗口?
【发布时间】:2011-09-14 18:35:20
【问题描述】:

我有一个打开弹出窗口的窗口,我想要将弹出窗口作为子窗口或另一个窗口打开并禁用后窗口?以免有人返回并关闭主窗口。

我试着把窗口放在最上面,但我仍然可以关闭主窗口。

private void axWebBrowser1_NewWindow3(object sender, DWebBrowserEvents2_NewWindow2Event e)
{
    BrowserWindow window = new BrowserWindow();
    window.axWebBrowser1.RegisterAsBrowser = true;
    window.Visibility = Visibility.Visible;
    window.textBox.IsEnabled = false;
    window.Height = 550;
    window.Width = 600;
    e.ppDisp = window.axWebBrowser1.Application;
    window.Topmost = true;            
}

【问题讨论】:

  • 将其他窗口的 IsEnabled 属性设置为 false。您需要使用弹出窗口的 Closing 事件来重新启用它们。
  • 这很有效,因为它再次打开了同一个窗口。所以这就是我无法跟踪方法和上下文的问题。
  • 你在什么时候显示你的表格?您使用的是 WinForms 还是 WPF?你在问题标签中都标记了。

标签: c# .net wpf visual-studio-2010


【解决方案1】:

设置子窗口的所有者有帮助吗?

private void axWebBrowser1_NewWindow3(object sender, DWebBrowserEvents2_NewWindow2Event e)
{
    BrowserWindow window = new BrowserWindow();
    window.Owner = this;
    ...          
}

【讨论】:

  • 这工作谢谢!它会关闭主窗口上的子窗口,这对我来说没问题..
【解决方案2】:

当您显示子窗口时,将其显示为模式窗口,使用 Form.ShowDialog Method。此时无需禁用父窗口,因为子窗口显示为模态窗口会使父窗口在模态窗口关闭之前无法访问。

BrowserWindow window = new BrowserWindow();
window.ShowDialog();

如果由于某种原因模态对您不起作用,请尝试这样的方法。我不确定您为什么不能使用模态,需要更多地了解您的要求。

private void axWebBrowser1_NewWindow3(object sender, DWebBrowserEvents2_NewWindow2Event e)
{
    BrowserWindow window = new BrowserWindow();

    // in your case I think the parent form should be = this.
    Form parentForm = this;    
    window.Tag = parentForm;
    window.FormClosing += new FormClosingEventHandler(this.BrowserWindow_FormClosing);

    parentForm.Enabled = false;
}

private void BrowserWindow_FormClosing(object sender, FormClosingEventArgs e)
{
    Form parentWindow = (sender as Form).Tag;
    parentWindow.Enabled = true;
}

【讨论】:

  • 因为同一个类的对象,它要么弄乱了我的上下文。
  • 我展示的方法只是打开窗口,并且方法在同一个类 BrowserWindow 中。因此,如果我创建同一个类的另一个实例并显示与上面代码中相同的窗口,我如何禁用前一个窗口并在关闭时启用它?
  • 我不确定我是否完全理解为什么 modal 不适合你。如果我没看错,还可以在创建 BrowserWindow 的新实例时尝试处理 Form.Closing 事件。您可以在实例化父窗口时将其设置为它的标签,然后在响应关闭时,通过从标签中抓取实例再次启用父窗口。
  • 这就像如果我确实设置了 IsEnabled 属性,我仍然可以返回父窗体并关闭它。
  • 我不明白你的意思。如果可能,请提供更多代码,以便我们查看整个问题。
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2019-10-06
  • 2023-03-07
相关资源
最近更新 更多