2015-04-22 58 views
1

我只是將一個FoxPro代碼加載到VB.NET。我有一個背景顏色爲skyblue的csslbuttonpanel用戶控件。這個控制被放到各種winforms上。如果我將csslbuttonpanel中的顏色更改爲紅色,則表單仍顯示天藍色。 我錯過了什麼嗎? 問候 格雷厄姆更改usercontrol背景顏色不顯示在窗體上

Public Class csslButtonPanel 
    Inherits Panel 
    Public Sub New() 

    ' This call is required by the designer. 
    InitializeComponent() 
    BackColor = Color.Red 
    ' Add any initialization after the InitializeComponent() call. 

End Sub 
End Class 
+0

你要把顏色改成紅色?在設計器或csslButtonPanel的構造函數中? 你確定你沒有將csslButtonPanel的BackColor再次設置爲它所在表單的.designer文件,因此覆蓋了構造函數中設置的顏色? –

+0

謝謝Stan,我將代碼放入csslbuttonpanel.vb文件中。正如漢斯所說,我需要這些屬性。這工作正常,但我不喜歡在代碼中構建這些基礎面板,標籤,文本框等。驚訝的是沒有一個可視化的方式來做到這一點。 – Graham

回答

2

這是因爲您在用戶控件的第一個版本犯了一個錯誤。你忘了告訴設計師默認值是什麼。您可以在「屬性」窗口中輕鬆查看。選擇窗體上現有的一個,並注意BackColor屬性是如何顯示的。它顯示在粗體類型中,表示其值不是默認值。

而且由於它不是默認值,所以它在窗體的InitializeComponent()方法中記錄了Color.SkyBlue。在UserControl中更改默認值不起作用,它將使用表單的InitializeComponent()方法中選定的值。

應該所做的是告訴設計師有關屬性的默認值。就像這樣:

<DefaultValue(GetType(Color), "255, 135, 206, 235")> _ 
Public Overrides Property BackColor As Color 
    Get 
     Return MyBase.BackColor 
    End Get 
    Set(value As Color) 
     MyBase.BackColor = value 
    End Set 
End Property 

<DefaultValue>屬性通知有關默認,天藍色在這種情況下,設計師。現在該值不會被記錄在窗體中,並且在用戶控件中更改默認值可能會有效。

容易犯的錯誤,每個人至少使它一次。 Color的屬性格式很尷尬,這沒有幫助。易於修復,但只需複製/粘貼片段並將字符串更改爲「255,255,0,0」以匹配Color.Red。重建。返回到表單並右鍵單擊現有控件上的BackColor屬性,然後選擇重置。他們現在將變成紅色。

+0

感謝您回覆Hans。代碼應該放在哪裏?用戶控制csslButtonPanel或表單。這也是在designer.vb代碼或只在vb代碼中。 – Graham

+0

在你的UserControl中,只有vb.code。 UCs沒有什麼特別的錯誤,但是你有額外的選擇只是從一個控制繼承,並完全改變它的工作方式。 UCs很好地包含多個控件,如果你只需要一個控件就不要使用它。 –

+0

我已將代碼放在designer.vb中的用戶控件中,並且完美地工作。再次感謝,花了幾個小時試圖追蹤那一個! – Graham