2012-12-22 51 views
-5

我做了一個簡單的tic,tac,toe遊戲。我有兩種形式,Form1frmStats。在我的frmStats我有一個標籤lblDraw。 我想要它,所以當玩家進入平局時,標籤會增加1。如何訪問Form1的代碼?從另一種形式訪問控件值

我Form 1代碼:

if (winner != 0) 
    this.Text = String.Format("Player {0} Wins!", winner); 
else if (winner == 0 && turnCounter == 9) 
    this.Text = "Draw!"; 
//this is where i want/think the code should be to change the label 
else 
    ... 
+0

將公共標籤'lblDraw'的修飾符設置爲公共。 –

+0

我有這個,但它不會在form1中工作:public Stats() { InitializeComponent(); System.Windows.Forms.Label lblDraw; – KangarooRider

+0

沒有不喜歡那..檢查我的答案。 –

回答

2

首先設置標籤lblDraw作爲

frmStats形式

public string strNumber 
{ 
    get 
    { 
     return lblDraw.Text; 
    } 
    set 
    { 
     lblDraw.Text = value; 
    } 
} 

Form1中

if (winner != 0) 
     this.Text = String.Format("Player {0} Wins!", winner); 
    else if (winner == 0 && turnCounter == 9) 
    { 
     this.Text = "Draw!"; 
     //this is where i want/think the code should be to change the label 
     frmStats frm = new frmStats(); 
     string number = frm.strNumber; 
     frm.strNumber = (Convert.ToInt32(number) + 1).ToString(); //incrementing by 1 
    } 

或者簡單地將標籤lblDraw改性劑公共,這是不推薦使用。

0

雖然Mr_Green的答案作品我覺得corrent的方式做這將是通過你的Form1中作爲一個變量來frmStats當你打開它:

frmStats newForm = new frmStats(this); 

創建內Form1的一個屬性來訪問數:

public int Num 
    { 
     get 
     { 
      return myNumber; 
     } 
    } 

然後在frmStats構造你必須訪問父窗體的公共屬性:

public frmStats(Form1 form) 
    { 
     InitializeComponent(); 

     lblDraw.Text = form.Num.ToString(); 
    } 
+0

邏輯是好的,但你如何直接在'frmStats'表單中訪問'lblDraw'?檢查我的解決方案..在看你的帖子後編輯:) –

+0

首先,他需要將信息從父母傳遞給孩子,而不是相反。其次,即使您確實想要將信息從孩子傳遞給父母,您仍然不應將父母表單的實例傳遞給孩子。它不應該有任何它的父母的具體知識。 – Servy

+0

@Mr_Green lblDraw在frmStats上,引用「在我的frmStats上我有一個Label lblDraw」,因此它爲什麼在frmStats構造函數中可用。 – Mitch