2011-02-01 7 views
1

再ロードの「ファイル」ダイアログボックスを表示するために、アプリケーションが起動されたとき(Alt-Tabタスク切り替え、タスクバーのアイコンのクリックなど)に通知する方法が必要です。WinFormsには、WPFのApplication.Activateと同様のイベントがありますか?

私はMainForm.Activatedを試しましたが、このイベントはアプリケーションモーダルダイアログを閉じるときに呼び出されます。

私は、Application.Activatedイベントに似ていて、WPFで見つかったものが理想的ですが、私はWinFormsアプリケーションから使用できます。

+2

「.NET 2.0クローン」とはどういう意味ですか? –

+2

「活性化」とはどういう意味ですか?それが最大化/最小化されていないとき? –

+0

例:Alt-Tabアプリケーションと私のアプリケーションがアクティブになる – Cornel

答えて

4

ActivatedDeactivateイベントがうまくいくようです。タブを離れると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"); 
     } 
    }, 

ちょうど、OnActivateApp内すると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); 
} 

から解決策を見つけたアクティブは、trueになります非アクティブ化された場合はfalseです。

+0

彼が本当に求めているのは、特定のフォームではなく、アプリケーションがアクティブになったときです。 –

+0

@Joep - わかりました。 – SwDevMan81

+0

@Joep @Cornel - 私の答えが更新されました。これはうまくいくはずです。私は複数のフォームを開いてテストし、それが動作します。 – SwDevMan81

1

通常の動作(Visual Studioなどの他のエディタ)では、アプリケーションの起動時に、エディタの外で修正されたファイルのみをチェックします(フォーカスのない状態でフォーカスを受け取ります)。

Activatedイベントがあまりにも頻繁に呼び出されるのではなく、プログラム外で修正されたファイルを検出する方法が正しくないとは限りません。(の1をバッファリングし、それを呼びましょう)彼らはバッファ内にあるとしてディスクからのファイルの内容を保管してください

  • あなたのプログラムに初めて

    • 読むファイル:私はあなたがこのようなあなたのロジックを実装する必要があると思います
    • ディスクからファイルを読み、内容を比較し、あなたのアプリケーションが起動されると
    • (のは、このバッファ2と呼びましょう)(OnActivateイベントのイベントハンドラ)、ユーザーがメモリ内のファイルを編集するために別のバッファからを許可しますバッファ1に対するファイル
    • ディスクからのファイルがバッファ1と異なる場合、変更されたファイルをロードしてその変更を上書きするようユーザーに促す
    • バッファ2のファイルをディスクに保存するときは、バッファ2
    • オプション:アプリケーションからディスクにファイルを保存する前に、バッファ2をバッファ1と比較して、ファイルがプログラム外で最後に変更されていないことを確認してください。

    このようにすると、ファイルが実際にプログラム外で変更された場合を除き、ファイルの変更を頻繁に確認することができます。

  • +0

    あなたは何について話していますか?あなたはこの記事を慎重に読んだのですか?これは、VSで現在開かれているファイルのVisual Studioによる変更の確認ではありません。これは、カスタムアプリケーションに関するもので、エンドユーザーが他のアプリケーションに「切り替え」た後、このアプリケーションをアクティブにした瞬間を「キャッチ」したいと考えています。 –

    +0

    gmaganaは正しいですが、アプリケーション(特定の形式ではない)がアクティブになったときに本当に通知を受けたい場合はどうしたらいいですか? – Cornel

    +1

    @Joep:はい、そしてOpは "リロードを表示するために"ファイル "ダイアログボックス"を出しました。これは私が扱ったものです。 –

    関連する問題