Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 在Windows.Forms控件中以编程方式设置设计时属性_Winforms - Fatal编程技术网

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

Winforms 在Windows.Forms控件中以编程方式设置设计时属性,winforms,Winforms,是否有一种简单的方法可以通过编程方式在控件上设置属性值,以便在设计器生成的代码中持久化该属性值 我想象控件构造函数或加载事件中的一段代码,当我在设计模式下打开控件时执行,但设置一个属性,使其以与通过属性网格手动更改值相同的方式持久化 编辑:是的,这与手动编辑设计器代码相同,但我希望以编程方式进行编辑。您是否考虑类似于: if (this.DesignMode) { // do somthing } 如果您将其放入构造函数中,请记住在之前调用InitializeComponent()。假

是否有一种简单的方法可以通过编程方式在控件上设置属性值,以便在设计器生成的代码中持久化该属性值

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


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

您是否考虑类似于:

if (this.DesignMode)
{
    // do somthing
}
如果您将其放入构造函数中,请记住在之前调用InitializeComponent()。

假设我理解这个问题


您可以使用VisualStudioGUI将该属性数据绑定到设置。检查该控件的属性,在
(应用程序设置)
(属性绑定)
数据
部分下,它取决于您想要的功能类型。如果在将控件添加到窗体时只需要设置属性,那么在控件的构造函数中设置属性就可以完美地工作。但是,使用“属性”面板所做的更改将优先,并且在控件的构造函数中设置属性不一定会影响控件的现有实例

如果希望能够在一个位置更改控件实例的属性,请在(应用程序设置),(属性绑定)中指定绑定。然后可以从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
    

    你不能编辑设计器文件吗?你的意思是当你重新运行程序时它会再次被更改吗?