c# - 如果窗口在后台,如何允许按钮单击事件
问题描述
我有一个应用程序ParentApp
,它启动另一个应用程序,ChildApp
。
ParentApp
在运行时显示一个表单ChildApp
- 只是一种当前正在运行的 Childapp显示带有一个取消按钮,它会杀死ChildApp
.
我想ParentApp
在运行时不可用ChildApp
,所以每当有人点击ParentApp
我想把它带到ChildApp
前台,这很好。
因此,我已将此事件处理程序添加到ParentApp
响应Activated
表单事件的事件处理程序中。
private void ParentAppForm_Activated(object sender, EventArgs e)
{
IntPtr childHwnd = _childApp.MainWindowHandle;
SetForegroundWindow(childHwnd );
}
(GotFocus
似乎没有工作)
不幸的是,如果用户单击 上的按钮,则永远不会点击该Cancel
按钮ParentAppForm
的事件处理程序,因为该Activated
事件首先触发并将前台窗口设置为另一个进程。
是否存在 - 即使应用程序不在前台也允许按钮事件触发?
解决方案
作为一种快速的解决方法,您可以检查鼠标指针是否在Button.Bounds
表单激活时描述的区域内。
Form.Bounds
您可以使用带有 Cursor.Position 坐标的PointToClient将鼠标指针位置转换为坐标。
像这样的东西:
private void ParentAppForm_Activated(object sender, EventArgs e)
{
if (this.button1.Bounds.Contains(this.PointToClient(Cursor.Position)))
ChildForm.Close(); //Or ChildApp.Kill()
else
ChildForm.BringToFront(); //Or SetForegroundWindow(ChildApp.Handle)
}
推荐阅读
- c - 如何在使用 gcc 编译期间禁用严格的 const 检查?
- java - 在 android studio 中设置编辑文本颜色,如 MS Word
- android - 原因:java.lang.IllegalArgumentException:requestCode 只能使用低 16 位
- angular - 具有内容类型的 Http 请求:Angular 中的 multipart/mixed
- c# - LDAP在C#中按属性搜索用户
- java - 挣扎于 Fragment 和 RecycleView 实现 OnItemClick
- spring - 如何在 Java 中为 Azure 认知服务获取文本到语音的访问令牌
- html - 如何为Angular中的两个不同组件提供背景图像?
- date - 从自定义日期 ADT 计算 Haskell 中两个日期之间的天数
- laravel - 如何在 InertiaJS 中传递参数?