gpt4 book ai didi

c# - 当我按下 Alt 键时,如何防止控制框获得焦点?

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:26 25 4
gpt4 key购买 nike

在我的应用程序中,我希望用户能够按住 Alt 以对鼠标操作应用某些修改。就像使用鼠标滚轮时不是垂直滚动,而是水平 ScrollView (同时按住 Alt)。

效果很好,但是在释放 Alt 后,我的控件不再具有焦点。当我按下 Space 时,我明白了原因。窗口菜单获得了焦点,因为我按下了 Alt

enter image description here

如何防止这种情况发生?

最佳答案

修复此问题并不容易,您需要防止 WM_SYSKEYDOWN 消息到达默认窗口过程。只有在它到达具有焦点的控件之前对其进行过滤才可行。这可以通过让您的表单实现 IMessageFilter 接口(interface)来实现。像这样:

public partial class Form1 : Form, IMessageFilter {
public Form1() {
InitializeComponent();
Application.AddMessageFilter(this);
}
protected override void OnFormClosed(FormClosedEventArgs e) {
Application.RemoveMessageFilter(this);
base.OnFormClosed(e);
}
public bool PreFilterMessage(ref Message m) {
// Trap WM_SYSKEYUPDOWN message for the ALT key
if ((Keys)m.WParam.ToInt32() == Keys.Menu) {
if (m.Msg == 0x104) { AltKeyPressed = true; return true; }
if (m.Msg == 0x105) { AltKeyPressed = false; return true; }
}
return false;
}
private bool AltKeyPressed;
}

当心许多副作用,它会阻止菜单的正常运行,并且使用 Alt 的快捷键将不再起作用。请考虑改用 Ctrl 或 Shift。

关于c# - 当我按下 Alt 键时,如何防止控制框获得焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18235781/

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