2010-08-16 59 views
0

我有一個用戶控件和一個贏取表單應用程序中的文本框。 我想使用visual studio的屬性窗口來更改該文本框的屬性。 我在同一個項目的各種形式中使用該控件,有可能嗎? 我已經設置文本框的修改財產公開,並設置以下的用戶控件屬性:提前帶有文本框的用戶控件

public TextBox mytextBox 
     { 
      get { return textBox1; } 
      set { textBox1 = value; } 
     } 

感謝。

回答

1

這樣做的目的是什麼?你是否試圖讓「一個TextBox控件由多個表單共享」(這不太實際)。不過,您可以設置您的表單,以便通過單一更改來更新所有表單。

+0

它有一個非常實際的用途,我創建了一個控件,它有一個文本框,以及其他一些按鈕和標籤,我在許多文檔中使用這個控件,但是在某些實現中,我希望文本框爲多行或者Backcolor改變了。 – Thunder 2010-08-16 07:14:51

+0

那麼你想使用每個表單上已經存在的TextBox?怎麼樣擁有一個字符串屬性,以便您可以將其設置爲您要使用的TextBox的名稱,然後在運行時初始化後,找到控件並獲得引用。或者,你可以在控件中使用TextBox,並簡單地將要修改該文本框的屬性公開爲控件的屬性。後者可能更傳統。 – Swanny 2010-08-17 07:20:31

0
[TypeConverter(typeof(ExpandableObjectConverter))] 
public TextBox mytextBox 
{ 
    get { return textBox1; } 
    set { textBox1 = value; } 
} 

注:

  1. PropertyGrid的角度看,設置器在這種情況下,沒有好處;已經分配的TextBox的屬性正在被修改。
  2. 請記住創建初始值,並將TextBox添加到UserControl的控件集合中。如果您使用VS設計器創建TextBox,則應該已經完成​​。如果您發現VS設計器方法InitializeComponents()正在取消您的更改,請自行創建並添加控件。
  3. 您可能需要重建項目和/或重新打開窗體設計器,以使更改可見。
  4. 題外話:如果可能的話,請使用Pascal-case屬性和自動實現的get;set;模式以提高可讀性。
+0

該屬性確實在設計時發生了變化,但是當我運行該程序時,我設置的所有自定義屬性均已丟失! – Thunder 2010-08-16 07:15:47

+0

這是因爲InitializeComponents()調用;您可以在Form1.designer.cs文件中看到更改。 解決此問題的一種方法是不要依賴設計人員,將其自己添加到構造函數中。 – Ani 2010-08-16 07:34:54