代码之家  ›  专栏  ›  技术社区  ›  JacquesB

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

  •  0
  • JacquesB  · 技术社区  · 15 年前

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

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

    编辑:是的,这与手动编辑设计器代码是一样的,但是我想用编程的方式来完成。

    4 回复  |  直到 13 年前
        1
  •  1
  •   C. Ross trotttrotttrott    15 年前

    假设我理解这个问题

    可以使用visual studio gui将该属性数据绑定到设置。检查该控件的属性,在 Data 截面 (Application Settings) , (Property Bindings) .

        2
  •  1
  •   TwoLineGuy    14 年前

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

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

    现在进入决赛。如果要在控件的类中设置影响控件的所有实例的属性,无论这些实例是尚未创建还是已存在,都必须有一点创造性。我找到了一个解决办法,但可能不是最好的。我的解决方案是这样的:

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

    1. 将所需的值存储在私有变量中。
    2. 将变量的值赋给属性。
    3. 指定一个事件处理程序,该处理程序在属性更改时将变量的值分配给属性。

    缺点是每个属性的编码量。此外,您将无法从“属性”窗格中更改属性。

        3
  •  0
  •   Simon Linder    15 年前

    你有没有想过:

    if (this.DesignMode)
    {
        // do somthing
    }
    

    如果将其放入构造函数中,请记住在调用initializecomponent()之前。

        4
  •  0
  •   Marcel Gosselin    13 年前

    如何:

    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