2013-11-26 62 views
3

我想定製控件根據Enabled屬性的值提供不同的BackColor。我繼承了Button,現在試圖將BackColor屬性隱藏起來,從視圖中隱藏它,然後再提供另一個,名爲BackColorEnabled定製屬性不顯示在屬性窗口中

這裏是該問題降低測試用例:

Imports System.ComponentModel 

Friend Class StyledButton : Inherits Button 
    Private _BackColorEnabled As Color 

    <Browsable(False)> 
    Friend Shadows Property BackColor As Color 
    Get 
     Return MyBase.BackColor 
    End Get 
    Set(value As Color) 
     MyBase.BackColor = value 
    End Set 
    End Property 

    <Browsable(True)> 
    Friend Property BackColorEnabled As Color 
    Get 
     Return _BackColorEnabled 
    End Get 
    Set(value As Color) 
     _BackColorEnabled = value 
    End Set 
    End Property 

    Sub New() 
    _BackColorEnabled = SystemColors.Control 
    End Sub 

End Class 

的問題是這兩種性質都沒有效果,即BackColor仍然顯示了,BackColorEnabled是不存在。根據我在網上發現的很多鏈接,設置BrowsableAttribute應該100%工作。那麼上面的代碼有什麼問題?

回答

3

看來,WinForms設計師不喜歡當屬性被聲明爲Friend,並且完全忽略它們,即使使用來自相同程序集的控件。在我更改爲Public之後,它的功能就像一個魅力。

就我所見,它不應該構成範圍問題,因爲類本身可以保持Friend

附註:我首先花費大量時間在一個更大的項目中調試此問題。然後開始收集關於在SO上提出問題的想法。準備一個簡化的測試案例 - 然後在幾分鐘內找到解決方案。只是覺得能夠與社區分享我的發現很好。

+1

我知道關於試圖隱藏BackColor的公開 - 範圍必須匹配,就好像它通過簽名一樣,但是您很快。相關的東西我剛剛遇到:w/ctl從ListView繼承,我想陰影/使用'Headerstyle',但它不屬於屬性列表...它是區分大小寫的。只要我將它改爲「HeaderStyle」(首都S),它就會消失。我已經來回切換了2-3次,以確保它不是別的。 「BackColor」與「Backcolor」相同。如果你離開陰影,VS會抱怨,但不會真正的陰影,除非大小寫匹配!也許是一個錯誤 – Plutonix

相關問題