2011-03-16 7 views
0

以下に述べたC#コードを試してみましたが、スナップショット撮影時には開いたファイルメニューの部分も表示されます。私は、これは私が得たスナップショットであるツールストリップメニュー項目をクリックしてMDIフォームのスクリーンショットを撮る方法

private void saveImageToolStripMenuItem_Click(object sender, EventArgs e) 
{ 

    String filename = "";   
    Bitmap screen = new Bitmap(network_drawing_panel.Width, network_drawing_panel.Height - 50); 
    using (Graphics g = Graphics.FromImage(screen)) 
    { 
     g.CopyFromScreen(0, 80, 0, 0, screen.Size); 
    } 



    // SaveFileDialog 
    SaveFileDialog dlg = new SaveFileDialog(); 
    dlg.InitialDirectory = @"C:\\images"; 
    dlg.DefaultExt = ".jpg"; 
    dlg.Filter = "JPEG Images (.jpg)|*.jpg|All files (*.*)|*.*"; 
    dlg.Title = "Save an Image file"; 

    if (dlg.ShowDialog() == DialogResult.OK) 
    { 
     filename = dlg.FileName;   


     try 
     { 
      screen.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg); 
     } 
     catch (Exception c) 
     { 
      Console.WriteLine(c.ToString()); 
     } 


    } 

} 

クリックイベント後、保存ボタンをクリックする前に画面をキャプチャするためにいくつかの助けを必要とするが、それは開いたファイルメニューの一部を含めることはできません

+0

*「クリックイベントの後、保存ボタンをクリックする前に画面をキャプチャするのには何か助けが必要です」*。これはちょうど起こることはありません。 'Click'イベントは、保存ボタンがクリックされると発生します。その間に写真を撮る間隔はありません。 –

+0

私は知りませんが、WinFormsのPreviewMouseDownのようなものはありませんか? – Tokk

+0

@Tokk: 'PreviewMouseDown'が何であるかわかりません。私はそれがWPFのことだと思いますが、私はWPFを使用しません。その出来事は私には分かりません。マウスボタンがクリックされてクリックされる前に*どのように知っていますか?時間旅行はまだ発明されていません。この場合でもまだメニューは表示されますので、スクリーンショットには表示されます。 –

答えて

0

これを行うネイティブな方法は、PostMessageを使用することです。これにより、操作を実行する前に現在のディスパッチを完全に完了させることができます。

WinFormsでは、同等のPostMessageはControl.BeginInvoke(フォームはコントロール)です。 WinFormsは実際にPostMessageを使ってBeginInvokeからデリゲートを実行します。

+0

@ tergiver:あなたが言うことを拡張してください。 – aman

+0

@aman:コードをメソッドにリファクタリングし、 'this.BeginInvoke(新しいアクション(MyScreenShotMethod))'を呼び出します。 – Tergiver

+0

お時間をいただきありがとうございます。私は試してみます – aman

関連する問題