gpt4 book ai didi

c# - 任务栏最小化C#Windows窗体问题

转载 作者:行者123 更新时间:2023-12-04 06:27:57 27 4
gpt4 key购买 nike

我有一个 Windows 窗体应用程序,当窗体被激活、停用或大小更改时,窗体会执行某些操作。是比较具体的。例如:

表单激活 : 将设置变量isActive为真,并将输入集中到一个输入框,供某人输入某些内容。

表单已停用 : 将设置变量isActive设置为 false,这样应用程序中的任何焦点更改(由远程机器消息、聊天消息等引起)都不会从其他应用程序窃取焦点。

现在,我有我的 webBrowser1.Focus() Form Activated 中的命令不理想的事件,因为当您单击任务栏图标时,它会尝试最小化,但由于它会重新聚焦到 Web 浏览器,因此该表单将再次恢复/激活。

我在 Stack Overflow 上做了一些搜索,找到了以下信息:

编辑以下信息:

我确实在 Stack Overflow 上的另一篇文章中找到了此信息:

protected void OnActivateApp(bool activate)
{
Console.WriteLine("Activate {0}", activate);
}

protected override void WndProc(ref System.Windows.Forms.Message m)
{
// Trap WM_ACTIVATEAPP
if (m.Msg == 0x1c) OnActivateApp(m.WParam != IntPtr.Zero);
base.WndProc(ref m);
}

但行为类似于我在上述 2 个事件中看到的问题。当任务栏图标被点击时,表单会捕捉到已停用:

Activate False



但随后,它立即执行以下操作:

Activate True



看起来,当您使用任务栏按钮最小化窗口时,它仍然保持为“聚焦”应用程序,直到您单击另一个应用程序。

其中一个帖子确实建议我捕获 GotFocus的形式,但没有我可以找到 GotFocus 的表单级别的事件, 如 GotFocus源自控制,而不是申请表。

问题:我如何允许使用任务栏按钮最小化表单,然后重新显示表单时,让它执行 webBrowser1.Focus()命令将焦点放在它应该在哪里?

最佳答案

抱歉,我原以为 GotFocus 事件会对表单起作用,但是当窗口本身的焦点发生变化时,它似乎不会触发。

所以我冒昧地编写了有效的代码。它改为利用 Form Resize Event。我为您的 Activated 和 Deactivate 事件留下了事件处理程序,以防它们仍然需要,但我认为它们不应该。请务必调用“刷新”,以便表单重新绘制并且焦点移动。

    public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private bool isActive = false;
private FormWindowState previousstate;
private void Form1_Load(object sender, EventArgs e)
{
previousstate = this.WindowState;
//Got Focus Anonymous Delegate handles focus on the textbox
//if the Form currently is Activated
this.Resize += delegate(object resizesender, EventArgs resizee)
{
//if (previousstate == FormWindowState.Minimized)
// {
txtGetFocus.Focus();
this.Refresh();
// }
previousstate = this.WindowState;
};
this.Activated += delegate(object activatedsender, EventArgs activatede)
{
isActive = true;
};
this.Deactivate += delegate(object deactivatesender, EventArgs deactivatee)
{
isActive = false;
};
}
}

如果您想根据某个 Windows 状态抑制移动,我注释掉了一个测试用例。希望这可以帮助。

关于c# - 任务栏最小化C#Windows窗体问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5811739/

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