2016-11-25 84 views
-1

我是C#上的總noob,我被困在更改其他類的狀態標籤文本。C# - 從另一個類中更改標籤文本

當這個類連接到數據庫我想改變標籤文本爲「Connected」:

public class DBConnect 
{ 
    public void Connect() 
    { 
     MySqlConnection conn; 
     string myConnectionString; 

     myConnectionString = "server = 127.0.0.1; uid=cardb;" + 
      "pwd=cardb; database=test;";    

     try 
     { 
      Form form = new Form(); 
      conn = new MySqlConnection(); 
      conn.ConnectionString = myConnectionString; 
      conn.Open(); 
      form.setStatus(); 
     } 
     catch (MySqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} 

這是我在Form類中創建的方法setStatus:

public partial class Form : System.Windows.Forms.Form 
{ 
    public Form() 
    { 
     InitializeComponent(); 
    } 

    public void setStatus() 
    { 
     StatusTextLabel.Text = "Connected"; 
    } 

的標籤文本雖然沒有改變..:/

+0

我想你是不正確的'Form'實例調用'setStatus()'方法。您已創建新的「表單」實例,該實例尚不可見。 – apocalypse

回答

1

我看不出有任何的代碼來創建一個DBConnect對象,或調用它的Connect()方法,並沒有代碼,使窗體對象可見,例如form.Show()

除此之外,您可能不應該使用Connect方法創建表單;請從表單中撥打Connect(),例如在Form_Load()中,讓它返回一個狀態,或者更好:conn對象(你現在在連接後丟掉),並且使Form_Load根據它設置Label.Text。

示例代碼:

private void Form1_Load(object sender, EventArgs e) 
{ 
    var conn = new DBConnect().Connect(); 
    if (conn != null && conn.State == ConnectionState.Open) 
    { 
     StatusTextLabel.Text = "Connected"; 
    } 
} 

public class DBConnect 
{ 
    public SqlConnection Connect() 
    { 
     SqlConnection conn = ... 
     // ... 
     return conn; 
    } 
} 
+0

第二部分做了訣竅。我將這些數據傳遞給Form類,並讓它做出改變。 –

+0

現在我有這樣的代碼: 'MySqlDataAdapter MySqlDataAdapter = new MySqlDataAdapter(「select * from factories」,connection.connection); MessageBox.Show(connection.connection.ToString()); DataSet DS = new DataSet(); MySqlDataAdapter.Fill(DS); dataGridView1.DataSource = DS.Tables [0];' 但我得到一個:在'dataGridView1的名字沒有出現在目前情況下錯誤 我有一個DataGrid ofcourse存在,但我希望將數據從MySQL傳遞給它 –

+0

在大多數情況下,您應該從表單中的代碼處理與用戶界面對象有關的內容。 UI對象在別處不會被知道。您可以將數據檢索方法放在任何你喜歡的地方,但它們應該簡單地返回數據,這是他們責任停止的地方。然後,表單代碼將數據發送到UI元素。 –

0

通過表單,而不是創建一個新的。

private Form form {get;set;} 

public DBConnect(Form form) 
{ 
    this.form = form; 
} 

那就試試這個

form.Invoke(new MethodInvoker(() => form.setStatus())); 
+0

這會創建一個「Programm停止工作」錯誤! :P –

+0

如果你想這樣做,你需要將表單傳遞給DBConnect?例如,當你創建數據庫連接,通過表單然後使用這個 – FakeCaleb

0

創建一個新的窗體的實例相反的,你可能需要已經打開窗體的實例,並從那裏調用該方法。你可以嘗試:

(System.Windows.Forms.Application.OpenForms["Form"] as Form).setStatus();