以编程方式在Windows.Forms控件中设置设计时属性

时间:2010-02-05 13:40:13

标签: winforms

是否有一种简单的方法可以在控件上以编程方式设置属性值,使其在设计器生成的代码中保留?

我想象一下控件构造函数或load事件中的一段代码,它是在我在设计模式下打开控件时执行的,但设置了一个属性,使得它的持久化方式与我通过手动更改值的方式相同属性网格。

编辑:是的,这与手动编辑设计器代码相同,但我想以编程方式进行编辑。

4 个答案:

答案 0 :(得分:1)

假设我理解了问题

您可以使用Visual Studio Gui将该属性数据绑定到某个设置。在Data(Application Settings)的{​​{1}}部分下查看该控件的属性。

答案 1 :(得分:1)

这取决于您想要的功能类型。如果在将控件添加到窗体时只需要设置属性,则在控件的构造函数中设置属性可以完美地工作。但是,使用“属性”面板进行的更改优先,而控件构造函数中的设置属性不一定会影响控件的现有实例。

如果您希望能够在一个位置更改控件实例的属性,则可以在(应用程序设置),(属性绑定)中分配绑定。然后,您可以修改Settings.settings文件中的所有绑定。但是,这仍然需要您为控件的每个实例分配属性绑定。

现在结束。如果要在控件的类中设置影响控件的所有实例的属性,无论是尚未创建实例还是已存在实例,都必须获得一点创意。我找到了解决方案,但它可能不是最好的。我的解决方案是这样的:

在控件的构造函数中,对于要设置的每个属性,您:

  1. 将所需值存储在私有变量中。
  2. 将变量的值分配给属性。
  3. 分配一个事件处理程序,只要该属性发生更改,就会将该变量的值赋给该属性。
  4. 缺点是每个属性的编码量。此外,您将无法从“属性”窗格更改属性。

答案 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