C#/ .NETでウィンドウが復元されたときに発生するイベントはありますか?ウィンドウが復元されたときにC#でイベントが発生しましたか?
ウィンドウがアクティブになったときに発生するイベントがありますが、最大化または最小化された状態など、復元されているウィンドウに対して対応するイベントが見つかりません。
C#/ .NETでウィンドウが復元されたときに発生するイベントはありますか?ウィンドウが復元されたときにC#でイベントが発生しましたか?
ウィンドウがアクティブになったときに発生するイベントがありますが、最大化または最小化された状態など、復元されているウィンドウに対して対応するイベントが見つかりません。
あなたはこのようにそれを確認することができます:あなたはあなたができる、フォームのWindowState
プロパティを使用して好きではないと、フォームの前の状態を示すフラグの周りに保つためにしたくない場合は
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
...
}
else if ....
{
}
}
'Resize'イベントの' if(this.WindowState == FormWindowState.Maximized){...} 'があなたが探しているものです。 –
状態が*変更*されているかどうかは実際にはわかりませんが、サイズ変更時にはその状態だけが表示されます。 –
わずかに低いレベルで同じ結果を達成します。
フォームのウィンドウプロシージャ(WndProc
)を無効にしてWM_SYSCOMMAND
message(SC_RESTORE
)を聞く必要があります。
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_RESTORE = 0xF120;
if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_RESTORE)
{
// Do whatever processing you need here, or raise an event
// ...
MessageBox.Show("Window was restored");
}
base.WndProc(ref m);
}
このようにして将来のWindows版では動作しなくなり、MonoやCEで動作しなくなることを覚えておいてください。 –
@ SoMoS:将来のWindows版では動作しなくなるとは考えられません。ウィンドウングフレームワーク全体が書き換えられない限り、これは正常に動作します。そして起こった場合、これ以上の互換性の問題があります。 .NET Framework P /とにかくこのようなものの大部分を呼び出します。それはWindows CE上で正常に動作するはずです。私はモノについてはわかりませんが、この質問はそのようなサポートの必要性を示していませんでした。 –
私はちょうどあなたが避けることができるので、あなたが依存することを追加しているので、低すぎることは.Netの哲学に対して少しです。また、Linux(とMono)がPInvokeをサポートしていないことを確認することができます(またCEには完全なサポートはありません)。 –
これは、追加するのは簡単です:
public partial class Form1 : Form {
private FormWindowState mLastState;
public Form1() {
InitializeComponent();
mLastState = this.WindowState;
}
protected override void OnClientSizeChanged(EventArgs e) {
if (this.WindowState != mLastState) {
mLastState = this.WindowState;
OnWindowStateChanged(e);
}
base.OnClientSizeChanged(e);
}
protected void OnWindowStateChanged(EventArgs e) {
// Do your stuff
}
に行く私はこの質問はかなり古いです知っているが、この方法で動作します:
public Form1()
{
InitializeComponent();
this.SizeChanged += new EventHandler(Form1_WindowStateTrigger);
}
private void Form1_WindowStateTrigger(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
MessageBox.Show("FORM1 MINIMIZED!");
}
if (this.WindowState == FormWindowState.Normal)
{
MessageBox.Show("FORM1 RESTORED!");
}
if (this.WindowState == FormWindowState.Maximized)
{
MessageBox.Show("FORM1 MAXIMIZED!");
}
}
SizeChangedイベントを使用して、WindowStateのチェックと組み合わせてここでトリックを行います。
あなたは単純なサイズ変更のヒアを考慮しません!したがって、最後の状態をどこかに保存して、usr-local-ΕΨΗΕΛΩΝが提供するように評価する必要があります。 – Rekshino
Redhartからの回答が良いです。これは同じですが少しシンプルです:
public Form1()
{
InitializeComponent();
this.SizeChanged += Form1_SizeChanged;
}
#region Event-Handlers
void Form1_SizeChanged(object sender, EventArgs e)
{
var state = this.WindowState;
switch (state)
{
case FormWindowState.Maximized:
ClearMyView();
DisplayMyStuff();
break;
case FormWindowState.Minimized:
break;
case FormWindowState.Normal:
ClearMyView();
DisplayMyStuff();
break;
default:
break;
}
}
#endregion Event-Handlers
「復元する」とはどういう意味ですか? – AlexCode
SizeChangedイベントを試しましたか? http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.sizechanged.aspx – Jon
復元すると、アプリケーションが(最小化状態から来た)タスクバーから再起動されたことを意味しますか? –