euc*_*135 4 c# event-handling winforms
我正在寻找窗体最大化或最小化后调用的窗体中的事件.
据我所知,有像SizeChanged或WndProc这样的事件可以处理最大化窗口,但是在用户尝试最大化窗口后立即调用它,并且在窗口完全最大化之后不会调用它.
我正在寻找像ResizeEnd这样的事件,但也许这个被称为MaximizedEnd或MinimizedEnd
反正有吗?
我认为这很简单:
protected override void OnSizeChanged(EventArgs e) {
if (this.WindowState == FormWindowState.Maximized) {
MessageBox.Show("Max!");
}
base.OnSizeChanged(e);
}
Run Code Online (Sandbox Code Playgroud)
窗口大小后,不确定您的意思.这也可能有用:
protected override void OnSizeChanged(EventArgs e) {
if (this.WindowState == FormWindowState.Maximized) {
this.BeginInvoke(new MethodInvoker(delegate { MessageBox.Show("Maxed"); }));
}
base.OnSizeChanged(e);
}
Run Code Online (Sandbox Code Playgroud)
替换为MessageBox.Show(...)
您的代码.
这就是加布里埃尔解决方案的详细内容。我认为也没有 WindoStateChanged 事件。
我刚刚测试了这个解决方案,当您单击最大化按钮时它就可以工作。但它似乎被解雇了 3 次。我可能会做一些调试,并找出您想要拦截的 m.Msg 内容,以检查状态是否已更改。我在这里找到了其中一些 WM_ 消息的快速参考http://www.autohotkey.com/docs/misc/SendMessageList.htm。
protected override void WndProc(ref Message m)
{
FormWindowState previousWindowState = this.WindowState;
base.WndProc(ref m);
FormWindowState currentWindowState = this.WindowState;
if (previousWindowState != currentWindowState && currentWindowState == FormWindowState.Maximized)
{
// TODO: Do something the window has been maximized
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,在我测试期间,上面的代码至少被触发 3 次。下面的代码只会被触发一次。它有点长,但也可能更直观,更全面地解决您如何触发事件的问题。感谢 Yore 对你的这个想法的问题发表评论。
public Form1()
{
InitializeComponent();
this.SizeChanged +=new EventHandler(Form1_SizeChanged);
FormMaximized += new EventHandler(Form1_FormMaximized);
_CurrentWindowState = this.WindowState;
if (_CurrentWindowState == FormWindowState.Maximized)
{
FireFormMaximized();
}
}
public event EventHandler FormMaximized;
private void FireFormMaximized()
{
if (FormMaximized != null)
{
FormMaximized(this, EventArgs.Empty);
}
}
private FormWindowState _CurrentWindowState;
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized && _CurrentWindowState != FormWindowState.Maximized)
{
FireFormMaximized();
}
_CurrentWindowState = this.WindowState;
}
void Form1_FormMaximized(object sender, EventArgs e)
{
//TODO Put you're code here
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14597 次 |
最近记录: |