2013-03-18 59 views
-2

我正在製作一個ATM模擬器,並且我正在嘗試在一個表單上創建另一個表單(ATM)的按鈕。我已經能夠做到這一點,但只適用於一種形式,因爲當新的表單出現時,我無法點擊其他具有「添加atm」按鈕的表單。我試過使用C#的Form.ShowForm.ShowDialogApplications.Run()當出現新表單時,無法點擊其他表單C#

這裏是代碼:

public class Program 
    { 
     private Account[] ac = new Account[3]; 
     private ATM atm; 
     public Form1 form1; 

     /* This function initilises the 3 accounts 
     * and instanciates the ATM class passing a referance to the account information 

     */ 
     public Program() 
     { 

      ac[0] = new Account(300, 1111, 111111); 
      ac[1] = new Account(750, 2222, 222222); 
      ac[2] = new Account(3000, 3333, 333333); 

      Thread form1thread = new Thread(new ThreadStart(startform)); //Creates ATM Form 
      //Thread atm2 = new Thread(new ThreadStart(start)); 

      form1thread.Start(); 
      //atm2.Start(); 
     } 


     static void Main(string[] args) 
     { 
      new Program(); 
     } 

     public void startform() 
     { 
      form1 = new Form1(this); 
      form1.ShowDialog(); 
     } 

     public void newatm() 
     { 
      atm = new ATM(ac); 
      atm.ShowDialog(); 
     } 

     public void makethread() 
     { 
      Thread newatm = new Thread(new ThreadStart(startform)); 
      newatm.Start(); 
     } 
    } 

,並在Form1:

public partial class Form1 : Form 
{ 
    Program program; 

    public Form1(Program program) 
    { 
     InitializeComponent(); 
     this.program = program; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.ShowDialog(); 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 

     program.newatm(); 
    } 
} 
+1

也許是因爲你在代碼中的某個地方做ShowModal ..你能顯示你正在使用的代碼,這樣我們可以限制所有的猜測工作..? – MethodMan 2013-03-18 20:04:46

+0

你使用Windows Forms還是WPF? – user1166905 2013-03-18 20:05:37

回答

2

使用窗體的Show方法,而不是ShowDialog方法,如果你不想形式是一個模態對話框。

您還需要確保您從UI線程創建並顯示錶單,而不是後臺線程。根據您的代碼,您根本不需要創建後臺線程,只需從構造函數直接創建/顯示錶單即可。

+0

如果我使用顯示然後我得到一個錯誤告訴我使用ShowDialog,因爲我使用線程 – Maj 2013-03-18 20:05:58

+1

@SnazzyWolf然後不要創建/顯示從後臺線程的形式。從UI線程創建並顯示錶單。應該從UI線程創建/訪問所有控件。如果您需要先在後臺線程中執行其他工作,然後使用「BackgroundWorker」或「Control.BeginInvoke」回傳至UI線程以顯示新表單。根據編輯中的代碼,無需執行任何操作,只要不首先啓動新線程即可。 – Servy 2013-03-18 20:07:50

+0

我需要使用線程,這是任務的一部分 – Maj 2013-03-18 20:12:14

相關問題