2014-06-13 65 views
3

Visual Studio在設計時錯誤地調用了我的UserControl的自定義屬性。隱藏來自VS設計人員的WinForm UserControl自定義屬性

我看了很多張貼的關於使用[可瀏覽(假)[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)屬性,但是這並沒有爲我工作。

要重現此問題,使用Visual Studio,創建一個新的Windows窗體應用程序,則用戶控件添加到您的項目,並且該用戶控件拖到窗體。將公共定製屬性添加到您的用戶控件中,如下所示。

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 

    [Browsable(false)] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public bool AreYouThere 
    { 
     get 
     { 
      MessageBox.Show("Yes I Am Here!"); 
      return true; 
     } 
    } 
} 

當窗體是在Visual Studio設計器中打開,如果我強迫溶液清洗,然後重建,我會看到帶有文本消息框「是我在這裏!」,表明Visual Studio中有在我的用戶控件上稱爲AreYouThere屬性。

這是不應該的,因爲我已經裝修AreYouThere屬性與[可瀏覽(假)[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)屬性。

任何想法爲什麼會發生這種情況?

(此問題發生在Visual Studio 2010和2013上)。

+0

你能看到你的屬性網格屬性將其標記。你可能想要的是測試設計模式,並阻止你的代碼執行。 –

+0

不,由於我使用了[Browsable(false)]屬性,該屬性並沒有像預期的那樣出現在屬性網格中。我可以測試在屬性本身中是否處於設計模式,但是這仍然不會阻止該屬性被Visual Studio調用。 – ahazzah

+0

檢查你的InitializeComponent方法來驗證它不在那裏。如果是這樣,刪除它,看看它是否重現自己。 –

回答

1

爲了從每一個地方隱藏屬性可能你有這些屬性

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
[EditorBrowsable(EditorBrowsableState.Never)] 
[Bindable(false)] 
[Browsable(false)] 
+0

這不能解決問題。 – ahazzah