C#中,如何同时保持两个窗体激活?
基本的思想是当一个窗体激活时设置另一个窗体激活。这样相互激活。然而我们只是用单纯的C#代码是无法实现的,我们需要用到WinApI。
我们现在有Form1和Form3两个窗体,Form1作为起始窗体。
public partial class Form1 : Form
{
Form3 ff = new Form3();
public Form1()
{
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
this.Activated += new EventHandler(Form1_Activated); }
void Form1_Activated(object sender, EventArgs e)
{//当Form1激活时,向Form3发送消息激活它
SendMessage(ff.Handle.ToInt32(), WM_NCACTIVATE, WA_ACTIVE, 0);
}
void Form1_Load(object sender, EventArgs e)
{
int activeForm = GetActiveWindow();
ff.Show();
ff.Activate();
//SendMessage(activeForm, WM_NCACTIVATE, WA_ACTIVE, 0);//我把这句话注释了也没有问题事实上是有这句话的,用于保持当前窗体激活
}
[DllImport("User32.dll")]
private static extern int GetActiveWindow();
const int WM_NCACTIVATE = 0x0086;
const int WA_ACTIVE= 1;
[DllImport("User32.dll")]
private static extern void SendMessage(int hwnd, int msg, int wParam, int lParam);
}
Form3的代码
void Form3_Activated(object sender, EventArgs e)
{
SendMessage(Application.OpenForms["Form1"].Handle.ToInt32(), WM_NCACTIVATE,WA_ACTIVE,0);
}