2016-12-11 39 views
-1

我最近爲學生項目開發了一個應用程序,並且一切正常。但是,如果我在這裏問一些問題,你當然可以認爲整個事情不是那麼實用......而且你是對的。讓我們開始吧。基本上我的項目的功能版本使用UI控制檯。在另一個班級中顯示我的表格

它運行,但從用戶的角度來看,使用類似這樣的東西並不是世界上最令人驚喜的東西。所以我決定用一些Windows窗體替換舊的控制檯。

Project global render with console

Project global render with form

這就是事情變得錯誤。我有 「3」 類:

  • 的Program.cs(主程序與所有嚴肅的事情)
  • formOne.cs
  • (爲每個選項按鈕的第一種形式) 形式/二至五個/的.cs(每個選項打開相應的表格)

在某個點,Program.cs中將啓動formOne.cs,從那裏用戶應該能夠在各種選項之間導航,因此各種形式......但不是。 formOne.cs打開,然後我們不能點擊任何東西(以及我們可以但沒有任何反應)。我在某個地方犯了一個錯誤,我想知道在哪裏以及如何解決它。這裏是我是如何進行的:

(這是基本的算法,而不是整個代碼)

的Program.cs:

class Program { 

formOne winRecep = new formOne(); 
formTwo winCrea = new formTwo(); 
formThree winSearch = new formThree(); 
formFour winDel = new formFour(); 
formFive winView = new formFive(); 

winRecep.ShowDialog(); 
string userChoice = winRecep.getUserChoice(); 

switch(userChoice){ 

case "create new task" : 
    winCrea.ShowDialog(); 
    break; 

case "search a task" : 
    winSearch.ShowDialog(); 
    break; 

case "delete a task" : 
    winDel.ShowDialog(); 
    break; 

case "view my tasks" : 
    winView.ShowDialog(); 
    break; 

} 

} 

formOne.cs:

class formOne { 

     string userChoice; 

     public formOne() 
     { 
      InitializeComponent(); 
     } 

     public string getUserChoice() 
     { 
      return userChoice; 
     } 

     private void formOne_Load(object sender, EventArgs e) 
     { 
      //blabla update current date, current hour... 
     } 

     private void buttonOptionOne_Click(object sender, EventArgs e) 
     { 
      userChoice = "create new task"; 
     } 

     private void buttonOptionTwo_Click(object sender, EventArgs e) 
     { 
      userChoice = "search a task"; 
     } 

     private void buttonOptionThree_Click(object sender, EventArgs e) 
     { 
      userChoice = "delete a task"; 
     } 

     private void buttonOptionFour_Click(object sender, EventArgs e) 
     { 
      userChoice = "view my tasks"; 
     } 

} 

這似乎很清楚,但我在某個地方犯了一個錯誤。我想在Program.cs中工作,而不是在formOne.cs中工作,因爲一切都在Program.cs中,所以最合理的方法是在這裏工作,而不是在類中隨處添加信息和變量。

有人可以幫我解釋爲什麼它錯了嗎?

編輯:使用Program.cs的申請沒有解決的事情:

class Program { 

     var winRecep = new formOne(); 
     var createtask = new formTwo(); 
     var viewTask = new formThree(); 
     var searchTask = new formFour(); 
     var deleteTask = new formFive(); 

Application.Run(winRecep); 
string userChoice = winRecep.getUserChoice(); 

switch(userChoice){ 

case "create new task" : 
    Application.Run(createtask); 
    break; 

case "search a task" : 
    Application.Run(searchTask); 
    break; 

case "delete a task" : 
    Application.Run(deleteTask); 
    break; 

case "view my tasks" : 
    Application.Run(viewTask); 
    break; 

} 

} 
+0

您需要像爲formOne一樣爲選定的表單創建實例。 'var winTwo = new formTwo(); winTwo.ShowDialog()' – Fabio

+0

問題是這樣的:Application.Run(winRecep)。要麼保留那個,並刪除switch語句或保留switch語句併爲winRecep調用創建一個案例。爲什麼?因爲你爲你創建了多個線程循環,你只需要1. – aguertin

回答

-1

您需要啓動您的主要形式是這樣的:

var mainForm = new formOne(); 
Application.Run(mainForm); 

這將啓動windows message loop。沒有消息循環,您的應用程序無法響應任何事件(如鼠標點擊或按鍵)。

+0

好吧,這可能是一個更好的語法,但它不能解決問題。我編輯了我的帖子,向您展示我如何使用應用程序,如果出現問題...... – Nawpe

-1

您應該做的第一件事就是使用Application.Run打開主窗體,如已經建議的那樣。這將啓動對其餘執行至關重要的消息循環:

var mainForm = new formOne(); 
Application.Run(mainForm); 

然後使用該窗體打開所有其他窗口。以Application.Run開頭的格式關閉將關閉應用程序,因爲消息循環也會結束。因此,在任何操作上,如點擊按鈕或編寫命令,打開您需要的表單。您可以致電Show打開其他表格,並可以繼續訪問主表格或ShowDialog,這將阻止進一步的行動,直到兒童表格關閉。

相關問題