有一種簡單的方法來編程設置的控制屬性值,使得其將在設計器生成的代碼被持久化?我想象一下在控制構造函數或加載事件中的一段代碼,當我在設計模式下打開控件時,它會執行,但設置一個屬性,使得它將以與手動更改值相同的方式設置屬性網格。通過編程設置設計時屬性中Windows.Forms的控制
編輯:是的,這將是一樣的手動編輯設計器代碼,但我想以編程方式做到這一點。
有一種簡單的方法來編程設置的控制屬性值,使得其將在設計器生成的代碼被持久化?我想象一下在控制構造函數或加載事件中的一段代碼,當我在設計模式下打開控件時,它會執行,但設置一個屬性,使得它將以與手動更改值相同的方式設置屬性網格。通過編程設置設計時屬性中Windows.Forms的控制
編輯:是的,這將是一樣的手動編輯設計器代碼,但我想以編程方式做到這一點。
你覺得是這樣的:
if (this.DesignMode)
{
// do somthing
}
如果你把這個給構造記()之前調用的InitializeComponent。
。假定我明白的問題
您可以在屬性數據綁定到一個設置,使用Visual Studio GUI。檢查該控件的屬性,在Data
部分下爲(Application Settings)
,(Property Bindings)
。
這取決於你想要什麼樣的功能。如果您只需要在將控件添加到窗體時設置屬性,那麼在控件的構造器中設置屬性就可以很好地工作。但是,使用「屬性」面板進行的更改將優先,並且在控件的構造函數中設置屬性不一定會影響控件的現有實例。
如果你希望能夠改變屬性控制的情況下,在一個地方,在(應用程序設置)指定綁定(屬性綁定)的作品。然後您可以修改Settings.settings文件中的所有綁定。儘管如此,仍然需要爲每個控件實例分配屬性綁定。
現在的結局。如果您想在控件的類中設置影響控件所有實例的屬性,這些實例是否尚未創建或已存在,則必須獲得一點創意。我找到了一個解決方案,但它可能不是最好的。我的解決辦法是這樣的:
在控件的構造函數,你要設置的每個屬性,您:
一個缺點是編碼爲每個屬性的量。此外,您將無法從「屬性」窗格更改屬性。
什麼:
Private Function GetPropertyByName(ByVal propName As String) _
As PropertyDescriptor
Dim prop As PropertyDescriptor
prop = TypeDescriptor.GetProperties(l_dWindow)(propName)
If prop Is Nothing Then
Throw New ArgumentException(_
"Matching ColorLabel property not found!", propName)
Else
Return prop
End If
End Function
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
GetPropertyByName("AnyPublicProperty").SetValue(AnyControl, "AnyStringVALUE")
Me.DialogResult = DialogResult.OK
End Sub
你就不能編輯設計文件? –
你的意思是說,當你重新運行這個程序時它會被重新更改? –