2008-09-15 42 views
1

我有一個擁有多個公共屬性的用戶控件。這些屬性會自動顯示在VS2005設計器的「Misc」類別下的屬性窗口中。除了枚舉的兩個屬性不能正確顯示外。UserControl類型的屬性Enum在設計器中顯示爲bool或根本不顯示

第一個上使用下列枚舉:

public enum VerticalControlAlign 
{ 
    Center, 
    Top, 
    Bottom 
} 

在設計這不顯示在所有。

第二個使用此枚舉:

public enum AutoSizeMode 
{ 
    None, 
    KeepInControl 
} 

這一個顯示出來,但設計師似乎認爲這是一個布爾值,並只顯示真與假。當你使用控件構建項目時,它會說它不能將類型bool轉換爲AutoSizeMode。

此外,這些枚舉是可以通過名稱空間全局聲明的,所以無處不在。

任何想法?

回答

0

對於初學者來說,第二個枚舉AutoSizeMode是在System.Windows.Forms中聲明的。所以這可能會導致設計者出現一些問題。

其次,你可能會發現MSDN上的以下頁面有用:

http://msdn.microsoft.com/en-us/library/tk67c2t8.aspx

+3

我在第一個例子中遇到了問題 - 我的枚舉根本沒有顯示出來。這個答案甚至沒有試圖解決這個問題。 – Tim 2010-03-23 17:04:31

0

有些事情嘗試(在VS2005設計模式,我發現是有點片狀):

  1. 開放您的web.config並將batch="false"添加到您的<compilation>標記。
  2. 嘗試設置默認爲您的枚舉:

    public enum VerticalControlAlign 
    { 
        Center = 0, 
        Top = 1, 
        Bottom = 2 
    } 
    
+1

這是WinForms NOT WebForms – 2008-09-15 16:13:22

0

你不需要讓你的枚舉全球,以便他們能夠在設計師可見。

澄清,請:

  1. 如果另一個值添加到您的AutoSizeMode枚舉,它仍然顯示爲一個布爾值?
  2. 如果(改爲)更改枚舉的名稱,它是否仍然顯示爲布爾值?
2

我對你的問題做了一個小測試(我不確定是否正確理解),並且這些屬性正確顯示在設計器中,所有的枚舉都顯示正確。如果這不是你想要的,那麼請進一步解釋你自己。

不要掛在那裏拋出的_Ugly部分。我只是用它來進行快速測試。

using System.ComponentModel; 
using System.Windows.Forms; 

namespace SampleApplication 
{ 
    public partial class CustomUserControl : UserControl 
    { 
     public CustomUserControl() 
     { 
      InitializeComponent(); 
     } 

     /// <summary> 
     /// We're hiding AutoSizeMode in UserControl here. 
     /// </summary> 
     public new enum AutoSizeMode { None, KeepInControl } 
     public enum VerticalControlAlign { Center, Top, Bottom } 

     /// <summary> 
     /// Note that you cannot have a property 
     /// called VerticalControlAlign if it is 
     /// already defined in the scope. 
     /// </summary> 
     [DisplayName("VerticalControlAlign")] 
     [Category("stackoverflow.com")] 
     [Description("Sets the vertical control align")] 
     public VerticalControlAlign VerticalControlAlign_Ugly 
     { 
      get { return m_align; } 
      set { m_align = value; } 
     } 
     private VerticalControlAlign m_align;   

     /// <summary> 
     /// Note that you cannot have a property 
     /// called AutoSizeMode if it is 
     /// already defined in the scope. 
     /// </summary> 
     [DisplayName("AutoSizeMode")] 
     [Category("stackoverflow.com")] 
     [Description("Sets the auto size mode")] 
     public AutoSizeMode AutoSizeMode_Ugly 
     { 
      get { return m_autoSize; } 
      set { m_autoSize = value; } 
     } 
     private AutoSizeMode m_autoSize;  
    } 
}