我需要一种方法在我的应用程序激活时通知(通过Alt-Tab任务切换,单击任务栏上的图标等),以显示重新加载“文件”对话框。
我尝试MainForm.Activated
但每当我关闭应用程序模式对话框时都会调用此事件。
理想情况下,我想要的是类似于WPF中的Application.Activated
事件,但我可以从WinForms应用程序中使用。
答案 0 :(得分:4)
Activated
和Deactivate
事件似乎对我有用。当您标签离开时,会调用Deactivate
。当您同时选中表单时,会调用Activated
:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Activated += new EventHandler(Form1_Activated);
this.Deactivate += new EventHandler(Form1_Deactivate);
}
void Form1_Deactivate(object sender, EventArgs e)
{
System.Diagnostics.Trace.WriteLine("DeActivated");
}
void Form1_Activated(object sender, EventArgs e)
{
System.Diagnostics.Trace.WriteLine("Activated");
}
},
刚刚找到here
的解决方案protected void OnActivateApp(bool activate) {
Console.WriteLine("Activate {0}", activate);
}
protected override void WndProc(ref Message m) {
// Trap WM_ACTIVATEAPP
if (m.Msg == 0x1c) OnActivateApp(m.WParam != IntPtr.Zero);
base.WndProc(ref m);
}
然后在OnActivateApp内部,如果激活了应用程序,则激活为true,如果已激活,则激活为false。
答案 1 :(得分:1)
通常的行为(即Visual Studio和许多其他编辑器)仅在您激活应用程序时检查在编辑器外部修改的文件(在没有焦点后获得焦点),如您所述。
我认为问题并不是你所暗示的过于频繁地调用Activated事件,而是你检测程序外部修改的文件的方法不正确。我认为你需要像这样实现你的逻辑:
通过这种方式,您可以经常检查文件修改,而不会中断用户,除非文件确实在您的程序之外进行了更改。