是否有一种简单的方法可以在控件上以编程方式设置属性值,使其在设计器生成的代码中保留?
我想象一下控件构造函数或load事件中的一段代码,它是在我在设计模式下打开控件时执行的,但设置了一个属性,使得它的持久化方式与我通过手动更改值的方式相同属性网格。
编辑:是的,这与手动编辑设计器代码相同,但我想以编程方式进行编辑。
答案 0 :(得分:1)
假设我理解了问题
您可以使用Visual Studio Gui将该属性数据绑定到某个设置。在Data
,(Application Settings)
的{{1}}部分下查看该控件的属性。
答案 1 :(得分:1)
这取决于您想要的功能类型。如果在将控件添加到窗体时只需要设置属性,则在控件的构造函数中设置属性可以完美地工作。但是,使用“属性”面板进行的更改优先,而控件构造函数中的设置属性不一定会影响控件的现有实例。
如果您希望能够在一个位置更改控件实例的属性,则可以在(应用程序设置),(属性绑定)中分配绑定。然后,您可以修改Settings.settings文件中的所有绑定。但是,这仍然需要您为控件的每个实例分配属性绑定。
现在结束。如果要在控件的类中设置影响控件的所有实例的属性,无论是尚未创建实例还是已存在实例,都必须获得一点创意。我找到了解决方案,但它可能不是最好的。我的解决方案是这样的:
在控件的构造函数中,对于要设置的每个属性,您:
缺点是每个属性的编码量。此外,您将无法从“属性”窗格更改属性。
答案 2 :(得分:0)
你是否想过这样的事情:
if (this.DesignMode)
{
// do somthing
}
如果你把它放到构造函数中,记得先调用InitializeComponent()。
答案 3 :(得分:0)
怎么样:
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