2016-06-20 38 views
-5

我有一個窗口,我從哪裏創建了一個班級。
我想更改該窗口窗體的標籤文本,但它不工作。以相同的格式從不同的班級更改標籤文本

這裏是我的代碼:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    class clowder 
    { 
     public clowder() 
     { 
      label2.text="boject created ok done"; 
     } 
    } 
    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     clowder c1 = new clowder(); 
    } 
} 
+0

目前還不清楚你在問什麼。你特別想做什麼,特別是阻止你做到這一點? – David

+0

問我如何在任何課程的運行時間更改標籤的文字。 –

+1

通過在對該標籤的引用上設置'.Text'屬性。當你嘗試*時會發生什麼? 「不起作用」並不描述實際問題。 – David

回答

0

label2不該類存在。你需要傳遞一個參考。事情是因爲這樣做 「工作」 一樣簡單:

public clowder(Label label2) 
{ 
    label2.Text = "boject created ok done"; 
} 

並調用它的時候:

clowder c1 = new clowder(this.label2); 

然而,這是一種混亂。

首先,在構造函數中這樣做通常是一個壞主意。構造函數應該簡單地構造一個對象,它不應該執行任務。其次,最好將UI元素引用保留在UI對象中(在這種情況下爲Form對象)。不要將UI元素傳遞到業務邏輯對象以修改這些元素,而是從業務邏輯對象獲取,並修改UI中的UI元素。更多的東西是這樣的:

public class clowder 
{ 
    public string SomeOperation() 
    { 
     return "boject created ok done"; 
    } 
} 

和形式:

label2.Text = new clowder().SomeOperation(); 
+0

如果我不想從class2返回值爲label2,那麼我怎麼能改變label2從類沒有返回它的值在主函數? –

+0

@hareemkhan:就像在這個答案中證明的一樣。 – David

+0

它給了我無效的例外。跨線程操作無效:控制'at'從其創建線程以外的線程訪問。 –