C#让TopMost窗体弹出并置顶层但不获取当前输入焦点的终极办法

为了使程序在弹出窗口时置顶层且不获取系统输入焦点,避免影响用户当前的操作,来电通来电弹屏软件尝试过N多种办法,例如:弹出前保存当前焦点窗口句柄,弹出时因为使用TopMost系统默认将焦点交给了弹出窗口,弹出后再将焦点还给弹出前的焦点窗口句柄(C#让窗体置顶弹出但不获取焦点)。这种方法貌似解决了问题,但是在弹出的时候还是会打断用户的部分操作。经过我们的不断探索和尝试,终于在Form底层取得了突破,效果很好,和qq的弹窗一样不会打扰用户操作。

 //声明常量:(释义可参见windows API)

        const int WS_EX_NOACTIVATE = 0x08000000;

        //重载Form的CreateParams属性,添加不获取焦点属性值。

        protected override CreateParams CreateParams

        {

            get

            {                

                CreateParams cp = base.CreateParams;

                cp.ExStyle |= WS_EX_NOACTIVATE;

                return cp;

            }

        }
时间: 2024-10-10 06:58:39

C#让TopMost窗体弹出并置顶层但不获取当前输入焦点的终极办法的相关文章

20151124001 关闭C#主窗体弹出是否关闭对话框

关闭C#主窗体弹出是否关闭对话框 private void Frm_Main_FormClosing(object sender, FormClosingEventArgs e)        {            DialogResult TS = MessageBox.Show("确定要关闭并退出程序?", "退出提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);            if (TS

[Phonegap+Sencha Touch] 移动开发24 打包wp8.1的App,运行时输入框聚焦弹出软键盘之后,界面上移而不恢复原位的解决办法

这个现象只出现在phonegap打包sencha touch的wp8.1程序会出现(仅wp8.1,wp8正常),其它js框架我测试了几个(app framework, jquery mobile),好像没有这个问题. 我来描述一下这个现象: 1.运行phonegap打包的wp8程序,打开一个有输入框的界面,如下图: 2.点击输入框,使其弹出软键盘,界面会上移,如下图: 3.点返回键隐藏软键盘(或者点击界面上其它地方隐藏软键盘),此时界面不恢复原位,如下图: 我的一些研究结果: 1.这种现象只出现

Extjs 窗体居中,双重窗体弹出时清除父窗体的鼠标事件

这个是监控窗体缩放的事件 缩放中居中主要在 'beforeshow' 和 'destroy'两个事件里面监控 var EditTempWindow; Ext.EventManager.onWindowResize(function() { if (EditTempWindow) { EditTempWindow.center() } }); Ext.define("Define.Class.EditWindow", { id: 'RoomEditWin', xtype: 'window

主窗体 弹出框,经验总结

前段时间做的无线无源的测温项目,弹出框的制作思路:都是利用.show()完成. 问题就来了:触发一次,弹出一个框,显然达不到要求,后来通过窗体间传值, 将窗体第一次触发后,就将触发条件屏蔽,直到弹出框销毁,再开启触发. 其实,弹出框完全可以用.showdialog()完成. 但是,这种方式在该弹出框未销毁的时候,不能操作其他的内容,适用于欢迎页的制作,关于页的制作等等. 而上面提到的方面,可以实现弹出框存在仅存在一个的时候,实现对其他内容的操作,但是实现有点复杂. 实质:窗体见传值! 弹出框 1

C# winform 窗体弹出选择目录或文件 的对话框

//弹出一个选择目录的对话框 privatevoid btnSelectPath_Click(object sender, EventArgs e) //弹出一个选择目录的对话框 { FolderBrowserDialog path = new FolderBrowserDialog(); path.ShowDialog(); this.txtPath.Text = path.SelectedPath; } //弹出一个选择文件的对话框 privatevoid btnSelectFile_Cli

页面单击按钮弹出modaldialog然后调用ajax处理程序获取数据,给父级页面控件赋值

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RefTopicList.aspx.cs" Inherits="Project.RefTopicList" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.

对于vs2012弹出错误提示“未找到与约束”的错误消息的解决办法!

问题描述: 我是因为一不小心点击了QQ管家里面的自动更新补丁导致的,一般我是不会更新这些补丁的,更新之后就变成了这样! 提示为: 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService RequiredTypeIdentity Microsoft.VisualStudio.Text.ITextDocumentFactoryService匹配的导出     解决过程: 有两种办法: 第一种: 1.参考:

自设table表格,获取内容,并经弹出框的url传参,获取结果显示在弹出框,并加载合计

table表格,选择框 form id="editForm1"> <table class="table_form"> <td >经济性质:</td> <td > <input width="150" type="text" id="nature_id" readonly onclick="show_nature()">

winform窗体弹出时,光标默认显示在指定的输入框内

private void Form1_Paint(object sender, PaintEventArgs e) { this.textBox1.SelectAll(); this.textBox1.Focus(); }