gpt4 book ai didi

c# - 当所有者最小化时,ShowDialog() 不会将表单置于顶部

转载 作者:行者123 更新时间:2023-11-30 22:44:09 26 4
gpt4 key购买 nike

当所有者最小化时,ShowDialog() 不会将表单置于顶部。它显示并可见,但未聚焦且位于当前窗口后面。即使使用注释行,我也看到了问题。

    public void Form1_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
// this.Hide();
using (var f = new Form1())
{
// this.WindowState = FormWindowState.Normal;
f.Text = "ShowDialog()";
f.Click -= new EventHandler(f.Form1_Click);
f.ShowDialog(this); // f is not on top?
this.Show();
}
}

最佳答案

    this.WindowState = FormWindowState.Minimized;

一旦执行,您的应用程序中就没有窗口仍然可以接收焦点。 Windows 需要找到另一个焦点,它将成为另一个应用程序的窗口。稍后您的对话框出现,但为时已晚,焦点已经丢失。

使用像 Control.BeginInvoke() 这样的技巧在对话框显示后 最小化窗体也不起作用,对话框会在父级最小化时自动关闭。你能做的最好的事情就是隐藏它。在对话框关闭之前,您必须使用相同的技巧来恢复它,否则您仍然会失去焦点。像这样:

    protected override void OnClick(EventArgs e) {
using (var f = new Form1()) {
f.Text = "ShowDialog()";
this.BeginInvoke(new Action(() => this.Hide()));
f.FormClosing += delegate { this.Show(); };
f.ShowDialog();
}
}

关于c# - 当所有者最小化时,ShowDialog() 不会将表单置于顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com