2017-03-16 48 views
0

我正在創建一次打開多個表單的C#應用​​程序。這個目前的工作是先打開表格,然後加載他們的內容。如何強制打開表單,加載其內容,然後打開下一個表單?如何在打開另一個表單之前進行表單加載?

重複動作是觸發多個表單一次打開的動作。

static void Main(string[] args) 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    ShowForms(); 
    Application.Run(); 
} 
static void ShowForms() 
{ 
    Random random = new Random(); 
    int formCount = 0; 

    RepeatAction(5,() => 
    { 
     formCount++; 

     int x = random.Next(0, 1000); 
     int y = random.Next(0, 1000); 

     Form1 form = new Form1 
     { 
      StartPosition = FormStartPosition.Manual, 
      ShowInTaskbar = false, 
      Location = new Point(x, y) 
     }; 

     form.FormClosed += (sender, e) => 
     { 
      if (--formCount > 0) 
      { 
       return; 
      } 

      Application.ExitThread(); 
     }; 

     form.Show(); 
    }); 
} 
+0

在Winforms中沒有單獨的「加載其內容」操作。它在構造表單對象時完成,它的InitializeComponent()方法由構造函數調用。大多數程序員會將它與「完全繪製」混淆起來,這可能需要一段時間才能完成控件和位圖的填充。顯示的事件可用於此,調用Update()以確保控件也被繪製。 –

回答

0

form.Show();導致顯示窗體。因此,要麼將RepeatAction設爲順序循環,要麼保留一組表格,然後遍歷數組並調用form.show()函數。

0

而不是一個簡單的循環,嘗試創建一個回調方法,當它被實例化時,它會爲每個表單提供回調方法,從Load事件結束時(或任何處理表單羣體)回調主邏輯。然後回調將記錄已經創建了多少表單並終止「循環」。

它看起來是這樣的:

static volatile int formCount = 0; 

static void Main(string[] args) 
{ 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     ShowForms(5); 

     Application.Run(); 


} 

static void ShowForms(int formsLeft) 
{ 
    if(formsLeft == 0) return; 

    Random random = new Random();      

    int x = random.Next(0, 1000); 
    int y = random.Next(0, 1000); 

    Form1 form = new Form1 
    { 
     StartPosition = FormStartPosition.Manual, 
     ShowInTaskbar = false, 
     Location = new Point(x, y), 
     LoadCallback =()=>ShowForms(formsLeft - 1); 
    }; 

    form.FormClosed += (sender, e) => 
    { 
     if (--formCount > 0) 
     { 
      return; 
     } 

     Application.ExitThread(); 
    }; 

    formCount++; 
    form.Show();   
} 

然後,您將需要一個LoadCallback屬性添加到Form1,類型行動,或自定義命名的委託,它不帶參數,返回void的。然後,您只需在任何方法填充表單的末尾調用LoadCallback(),然後返回到此代碼中創建一個更少的表單,直到沒有任何方法。

相關問題