2012-05-22 51 views
13

我有一個名爲LabelX1的標籤。這是在form2上。在form1上,我有一個按鈕。我希望將按鈕的文本轉移到其他表單的標籤上。我試過在C#中以另一種形式更改標籤的文本?

form2 frm2 = new form2(); 
frm2.labelX1.Text = this.button1.text; 

但它不起作用。有這樣簡單,直接的方法嗎?

+4

爲什麼它不工作?怎麼了? – SLaks

+1

您是否已經顯示了form2的實例?這樣你就可以創建另一個form2實例並在那裏設置標籤文本。並顯示該實例(例如Show()/ ShowDialog()) – Steve

+1

您的代碼是否已編譯? –

回答

18

您需要暴露您的標籤或其財產。

在表格2:

public string LabelText 
{ 
    get 
    { 
     return this.labelX1.Text; 
    } 
    set 
    { 
     this.labelX1.Text = value; 
    } 
} 

然後,你可以這樣做:

form2 frm2 = new form2(); 
frm2.LabelText = this.button1.text; 
1

有沒有一個簡單,直接的方法來做到這一點?

最簡單的方法是將labelX1作爲form2的公共成員。您遇到的問題是因爲從Form1代碼form2.labelX1不可見。在form2設計器中,您可以轉到labelX1的屬性並將其設置爲公開/內部的可見性。

更好的方法是將labelX1.Text公開爲可以在類外部的代碼中設置的屬性。

+1

你的答案仍然不正確保護的可見性將無助於任何事 –

+0

是啊我意外地寫了保護,我真的意味着公共......我正在編輯,而你評論! – hawk

+1

或至少內部 –

-1

你有沒有異常?您可以在form2上創建公共屬性,使用setter在標籤上設置文本,或者將labex1訪問修飾符公開並直接設置。它應該工作。

+0

向他展示一個例子。這裏的錯誤很明顯... – MoonKnight

+0

@Killercam錯誤對誰來說很明顯?他沒有發佈任何錯誤信息。 –

+0

如果您沒有足夠的信息來回答評論 - 要求提供詳細信息。你提供的不是答案。 – MoonKnight

8

您可以修改窗體2的構造是這樣的:

public Form2(string labelText) 
{ 
    InitializeComponent(); 
    this.labelX1.Text = labelText; 
} 

然後創建Form2傳入正文:

Form2 frm2 = new Form2(this.button1.text); 
+0

我同意這會工作,但這將是一次性更改。也許這對於OP來說已經足夠好了。 –

+0

@ K'Leg,他們沒有表明他們是否需要再次改變它......我只是提供選項。 –

+0

我同意這是他想要的一切,然後我認爲這是最好的答案。爲文本標籤創建屬性更容易。 –

5

裏面form2寫這個

public void ChangeLabel(string s) 
{ 
    labelX1.Text = s; 
} 

然後在其中創建表格2要這樣做

form2 frm2 = new form2(); 
frm2.ChangeLabel(this.button1.text); 
3

或者你也可以做到這一點>>

((Label)frm2.Controls["labelX1"]).Text = "test"; 
0

我改變了我的父窗口屬性下面的代碼:

this.MdiParent.Controls["label1"].Text = "test"; 
0
form2 frm2 = new form2(); 
((Label)frm2.Controls["labelX1"]).Text=button1.Text; 
frm2.Show(); 
0

如果您需要從代碼的其他地方訪問form2(例如按下按鈕),您將無法看到所創建表單的實例。爲了解決這個我創建一個公共實例來保存一個對它的引用,如:

public form2 form2_pub; 

然後創建後,您指定的新的到你的公共實例:

form2 frm2 = new form2(); 
frm2.Show(); 
form2_pub = frm2 

現在,您可以參考form2_pub在你的例程中。

適用於我至少。

請記住,在你的setter中,你可以運行任何你想要的其他代碼。 舉例來說,我用下面的表達出我想要另一種形式是什麼通過只設置show_scanning爲true:

public bool show_scanning //turns on the scanning screen 
    { 
     set 
     { 
      scanning_pnl.Visible = true; 
      notReady_pnl.Visible = false; 
      timer1.Enabled = true; 
     } 
    } 
相關問題