2010-01-31 83 views
2

我在C#中可見Studio快速創建持有的我常用的方法等堆一個DLL選擇類庫選項...創建控件

我試圖創建的一個文本框class文件,這樣當我將dll添加到另一個項目時,我必須鍵入的內容是:

MyControls.Create(TextBox);

...它會創建一個文本框並將其返回給我,然後我可以將它添加到窗體中。

我知道如何創建類等,所以,我quesiton是...爲什麼我不能使用System.Windows.Forms是一個類文件?我在Class文件如下:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace MyControls 
{ 
    public class class1 
    { 
     public object Create(object control) 
     { 
      System.Windows.Forms.TextBox t = new System.Windows.Forms.TextBox(); 
      // textbox properties go here etc... 

      return control; 
     } 
    } 
} 

但紅squigly線都跟我說「之類的命名空間的‘視窗’不存在命名空間‘系統’存在(是否缺少程序集參考)?」

我忘了在這裏添加什麼......?

謝謝:)

回答

2

聽起來好像你缺少System.Windows.Forms參考;添加引用,你的代碼應該編譯好。


旁註
我變得有點好奇你的方法:

public object Create(object control) 
{ 
    System.Windows.Forms.TextBox t = new System.Windows.Forms.TextBox(); 
    // textbox properties go here etc... 

    return control; 
} 

什麼是用於輸入參數?如果你不使用它,就沒有必要傳遞它。另外,由於該方法應該爲您創建控件,因此您可以將返回類型更改爲Control。這將刪除將其添加到表單中的需求。我建議設計方法是這樣而不是(利用仿製藥):

public T Create<T>() where T : Control 
{ 
    T control = Activator.CreateInstance<T>(); 
    // textbox properties go here etc... 

    return control; 
} 
+0

謝謝弗雷德裏克滿口:):d – 2010-01-31 08:39:37

+0

@baeltazor:歡迎您:)注意更新的代碼示例(與添加的類型約束,我第一次忘了) – 2010-01-31 08:40:58

+0

輸入參數是將要使用這樣我就可以通過控制創建之前的一些屬性,以防萬一我只是想讓一個控件創建一個稍微不同的一次...但我更喜歡你的方式:P – 2010-01-31 08:42:03

1

是的,你必須在項目的引用添加到的WinForms DLL的引用(System.Windows.Forms的)。當你製作一個win窗體應用程序時,這種情況會自動發生,但是由於你只是製作了一個dll,它不在那裏。

1

添加參考。由於您創建了類庫而不是表單項目,因此您沒有必要的庫引用。轉到「項目」菜單>「添加引用」,然後從「.NET」選項卡中選擇「System.Windows.Forms」。

0

如上所述,添加對System.Windows.Forms的引用就足夠了。 雖然我個人不喜歡在同一個程序集中混合使用公共類和控件,但是爲非GUI代碼加上另一個項目,併爲純GUI代碼添加另一個項目。