2016-04-03 4 views
2

Visual Studio 2015 を使用してC#アプリケーションを開発しています。フォーム1に2つのフォームがあります。クリックするとボタンが表示されます。 はform2を表示します。これは、form_loadイベントでこれを使用すると、フォーム2 が完全にロードされた後、これを行うにはフォーム2の を使用しています。 空白のページを印刷してフォームを表示しています。 も試してみましたそれはform_shown上にありますが、これはボックスを表示します 要素は要素自体ではなく、 のように表示されますが、これを行うにはもっと良い方法があります。 しかし、私はCで新しくなっています。 NGフォームのすべての要素が完全に読み込まれているかどうかチェックするC#

以下は、私が示されたイベントが早すぎるほんの少しを発射Form2を

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace MyApp 
{ 
    public partial class Form2: Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void Form2_Load(object sender, EventArgs e) 
     { 

      this.Shown += new System.EventHandler(this.Form2_Shown); 
     } 

     private void Form2_Shown(object sender, EventArgs e) 
     { 
      printForm.Print(); 
     } 
    } 
} 
+3

チェック:https://msdn.microsoft.com/en-us/library/aa287529(VS.71).aspx私は:) – Steve

+0

感謝の@Steve @Hans Passantさん、ありがとうございます:)問題はもう一度ソートされました – Malcolm

答えて

4

に持っているコードの例です。フォームのフレームと背景がペイントされますが、残りは後で続きます。ペインティングは他に何もする必要がない場合にのみ発生する優先順位の低いタスクです。発生イベントが最初に発生します。

回避策は簡単です。フォームのUpdate()メソッドを呼び出すことによって、更新を完了するようにフォームに頼んでください。修正:MSDNの例で

private void Form2_Shown(object sender, EventArgs e) 
    { 
     this.Update(); 
     printForm.Print(); 
    } 
+0

それに見ていきます – Malcolm

関連する問題