これはGabrielのソリューションの詳細を示しています。私は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
}
}
上記のコードは、少なくとも私がテストしている間は3回発砲します。以下のコードは一度だけ起動します。もう少し時間がかかりますが、より直感的になり、イベントを発生させる方法についてのあなたの質問にもっと完全に対処するかもしれません。このアイデアのためのあなたの質問への彼のコメントのためにYoreに感謝します。
protected override void OnSizeChanged(EventArgs e) {
if (this.WindowState == FormWindowState.Maximized) {
MessageBox.Show("Max!");
}
base.OnSizeChanged(e);
}
ないあなたは、ウィンドウがサイズである後によって何を意味するかを確認します。
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
}
あなたはSizeChangedを購読することができますし、リスナの中にはWindowStateがMaximizedに設定されるまで待つスレッド(PInvoke )、ResizeEndメソッドを呼び出します。 – SimpleVar