您的位置:首页 > 编程语言 > C#

C# WINFORM 强制让窗体获得焦点(可实现单次置顶或持续置顶)

2014-03-01 01:10 567 查看
这个是从这个前辈那里转载来的传送门:点击打开链接

//首先要说明的是与TopMost的效果不同,TopMost是属性定义,而且设置True后,如果不设为Flase则一直置顶,效果很差,
//以下方法解决了TopMost使用上的不足
//调用API

[System.Runtime.InteropServices.DllImport("user32.dll",CharSet=System.Runtime.InteropServices.CharSet.Auto,ExactSpelling=true)]

publicstaticexternIntPtrGetForegroundWindow();//获得本窗体的句柄

[System.Runtime.InteropServices.DllImport("user32.dll",EntryPoint="SetForegroundWindow")]

publicstaticexternboolSetForegroundWindow(IntPtrhWnd);//设置此窗体为活动窗体

//定义变量,句柄类型

publicIntPtrHandle1;
//在窗体加载的时候给变量赋值,即将当前窗体的句柄赋给变量
voidForm1_Load(objectsender,EventArgse)

{

Handle1=this.Handle;

timer2.Enabled=true;

}
//加载一个定时器控件,验证当前WINDOWS句柄是否和本窗体的句柄一样,如果不一样,则激活本窗体
privatevoidtimer2_Tick(objectsender,EventArgse)

{

if(Handle1!=GetForegroundWindow())//持续使该窗体置为最前,屏蔽该行则单次置顶

{

SetForegroundWindow(Handle1);
//timer2.Stop();//此处可以关掉定时器,则实现单次置顶

}

}

示例代码:


namespaceWinFormsApp_GetForegroundWindowTest

{

publicpartialclassForm1:Form

{

//调用API

[System.Runtime.InteropServices.DllImport("user32.dll",CharSet=System.Runtime.InteropServices.CharSet.Auto,ExactSpelling=true)]

publicstaticexternIntPtrGetForegroundWindow();//获得本窗体的句柄

[System.Runtime.InteropServices.DllImport("user32.dll",EntryPoint="SetForegroundWindow")]

publicstaticexternboolSetForegroundWindow(IntPtrhWnd);//设置此窗体为活动窗体

//定义变量,句柄类型

publicIntPtrHandle1;

Timertimer2=newTimer();


publicForm1()

{

InitializeComponent();

}


FormForm2;


//在窗体加载的时候给变量赋值,即将当前窗体的句柄赋给变量

voidForm1_Load(objectsender,EventArgse)

{

Handle1=this.Handle;

timer2.Tick+=newEventHandler(timer2_Tick);

timer2.Interval=1000;

}


//加载一个定时器控件,验证当前WINDOWS句柄是否和本窗体的句柄一样,如果不一样,则激活本窗体

privatevoidtimer2_Tick(objectsender,EventArgse)

{

//if(Handle1!=GetForegroundWindow())//持续使该窗体置为最前,屏蔽该行则单次置顶

//{

SetForegroundWindow(Handle1);

timer2.Stop();//此处可以关掉定时器,则实现单次置顶

//}

}


privatevoidbtnSetForm2ToTop_Click(objectsender,EventArgse)

{

if(Form2==null)return;


timer2.Enabled=true;

Handle1=Form2.Handle;

}


privatevoidbtn_OpenForm2_Click(objectsender,EventArgse)

{

Form2=newForm();

Form2.Text="Form2";

Form2.Show();

}

}

}










内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: