2011-01-12 29 views
0

我有一個程序在啓動時動態創建控件,當代碼實際執行時的代碼位於實際窗體的類中時,它工作得很好。我試着將代碼移到一個單獨的類中,發現我無法使用Controls.Add()。我如何從一個單獨的類中將控件添加到表單中?這是我到目前爲止有:使用C#中單獨的類的控件

  TextBox txtbx = new TextBox(); 
      txtbx.Text = "asd" + x.ToString(); 
      txtbx.Name = "txtbx" + x.ToString(); 
      txtbx.Location = new Point(10, (20 * x)); 
      txtbx.Height = 20; 
      txtbx.Width = 50; 
      Controls.Add(txtbx); 

錯誤1「控制」這個名字並不在當前的背景下

回答

3

Controls實際上是由Control類露出的屬性(以及因此Form類,因爲它從Control繼承),它代表已被添加到窗體類的該特定實例中的所有控制的集合。

這就是爲什麼你不能使用它從另一個類,因爲你沒有參考Form對象,你試圖在其他類中添加控件。這就是「在當前情況下不存在」的意思。

你需要傳遞的形式要的情況下將控件添加作爲參數傳遞給在類中的方法,將添加控件:

public void AddControls(Form frm) 
{ 
    TextBox txtbx = new TextBox(); 
    txtbx.Text = "asd" + x.ToString(); 
    txtbx.Name = "txtbx" + x.ToString(); 
    txtbx.Location = new Point(10, (20 * x)); 
    txtbx.Height = 20; 
    txtbx.Width = 50; 
    frm.Controls.Add(txtbx); 
} 

但你可能要重新設計你的應用程序,如果你被迫進入這樣的位置。你真的不應該把控件添加到一個單獨的類的表單中,因爲這會增加你的用戶界面和輔助類之間的耦合量,你應該儘量減少儘可能的最小化。一般來說,大部分時間你發現一些東西特別困難,應該發出一個紅旗,你可能會試圖做錯誤的方式。

1

存在,您至少需要形式的參考。在你的Program.cs類,你可以參考存儲的主要形式,如:

public class Program { 

    public static Form MainForm; 

    public static void Main() { 
     ... 
     MainForm = new Form1(); 
     Application.Run(MainForm); 

    } 

} 

然後將控件添加到主窗體,你可以這樣做:

Program.MainForm.Controls.Add(txtbx); 

當然,這引入了一整套另一個問題是這樣緊密耦合你的類,但是從聽起來你對Windows Forms或.NET是新手的問題,因此現在沒有必要去解決這個問題。