2014-02-11 60 views
0

我一直在爲此掙扎了一個星期,我沒有看到任何其他問題。我需要做一些事情,例如Accessing Forms data from another form,但我需要訪問第二種形式的第一種形式的代碼中的變量,並在第二種形式中發生點擊事件。C# - 使用兩種形式,從第一種形式訪問變量

下面是一些第一種形式的(MainForm中的)代碼:

namespace Sudoku 
{ 
    public partial class mainForm : Form 
    { 
     public mainForm() 
     { 
      InitializeComponent(); 
     } 
     difficultyForm difForm = new difficultyForm(); 
     public string difficulty = ""; 

     private void generateNewPuzzleMenuItem_Click(object sender, EventArgs e) 
     { 
      generateBegin(); 
     } 

     private void generateBegin() 
     { 
      difForm.Show(); 
      difForm.difficultyTextBox.Text = ""; 
      difForm.difficultyTextBox.Focus(); 

這裏是一些第二形式的(difficultyForm的)代碼:

namespace Sudoku 
{ 
    public partial class difficultyForm : Form 
    { 
     string difficulty = ""; 

     public difficultyForm() 
     { 
      InitializeComponent(); 
     } 

     private void enterButton_Click(object sender, EventArgs e) 
     { 
      difficulty = difficultyTextBox.Text; 

      if (difficulty != "1" && difficulty != "2" && difficulty != "3" && difficulty != "4" && difficulty != "5") 
       MessageBox.Show("The difficulty must be an integer from 1 to 5.", "Difficulty Error", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); 
      else 
      { 
       this.Hide(); 
      } 

而且我在C#中的小白所以如果你有任何其他的提示會很棒,謝謝。

注:我使用的難度串的東西,因爲在代碼中進一步下跌,所以請不要告訴我用一個整數,謝謝。

+0

你想獲得第一種形式的變量的值,或設置它? [從另一個表單訪問表格數據]的 – Servy

+0

可能重複(http://stackoverflow.com/questions/21577732/accessing-forms-data-from-another-form) – Joe

+0

你的主要形式不應被消隱在文本其他形式或設置文本框的重點。這些事情應該以第二種形式完成。該文本框甚至不應公開曝光。 – Servy

回答

0

要將信息從第二個表單推送到主窗體,您應該使用事件。第二種形式的創建活動,並啓動它時,點擊您的按鈕:

public partial class difficultyForm : Form 
{ 
    string difficulty = ""; 

    public difficultyForm() 
    { 
     InitializeComponent(); 
    } 

    public event Action<string> DifficultySubmitted; 

    private void enterButton_Click(object sender, EventArgs e) 
    { 
     difficulty = difficultyTextBox.Text; 

     if (DifficultySubmitted != null) 
      DifficultySubmitted(difficulty); 

     //... 
    } 
} 

然後訂閱到主窗體上的事件:

private void generateBegin() 
{ 
    difForm.Show(); 
    difForm.difficultyTextBox.Text = ""; 
    difForm.difficultyTextBox.Focus(); 
    difForm.DifficultySubmitted += newDifficulty => difficulty = newDifficulty; 
} 
+0

我試過這個,但是難度(第一種形式)似乎沒有設置成我在第二種形式上輸入的難度。我將難度值分配給第一個表單上的文本框,而文本框中沒有任何內容出現。 – Toje

+0

@Toje你是否在事件處理程序中設置了它,當提交難度時會觸發它?這可能是適當的地方這樣做。 – Servy

+0

對不起,傳入的noob問題,但什麼是事件處理程序,完全是? – Toje

0

如果我正確理解你的困難,你可能想看看事件處理。

定義自定義事件的args類(如:DifficultyEventArgs或東西)。定義委託一個PARAM作爲事件參數

與類委託聲明事件..

調用委託中,你想觀察屬性的setter方法。

在其他的形式,你可以訂閱這個事件,監視它所做的任何更改。這只是一種方式。

此外,你應該更好地使用DifficultyLevel枚舉,而不是字符串。

0

你可以通過在Form1的構造PARAM DificultForm,所以訪問Form1的控制

0

如果你試圖做在一個特定circunstance僅僅是讓你的第二形式的文本框的值是什麼,你可以創建在第二個窗體的代碼的公共方法

public string GetTxtBoxValue() 
     { 
      return difficultyTextBox.Text; 
     } 

,然後把它從第一種形式。

但是,如果你想更好地控制它,我建議使用一個事件。

相關問題