设计师第一次设置相关属性的问题

时间:2009-10-28 15:01:46

标签: .net winforms designer propertygrid design-time

我开发了一个表单设计器,还开发了一些继承自标准控件(如按钮)的自定义控件。

另外,我有一些相关的属性,例如用户必须首先选择部门,然后选择人。并且在用户选择person之后,我设置了我的自定义控件的Text(在这种情况下从按钮继承)。
注意:用户可以更改Text属性。

一切正常,但是当我从数据库加载或拖放控件到表单设计器时,控件文本#set,

在覆盖Text属性并调试它之后,我看到文本设置正确,但在设置我的文本后,设计者使用controlName#设置文本,这是错误的。

如何解决这个问题?

提前致谢
哈密​​

2 个答案:

答案 0 :(得分:1)

有些属性可以应用于您的属性,例如ReadOnly,这会阻止设计师设置您的属性。

我目前无法找到该链接,但还有一种告诉表单设计者应该按特定顺序设置属性的方法。


修改

好吧,不是我记得的那样,但我觉得像ISupportInitialize界面那样。

类似的东西:

Public Class Test
    Implements ISupportInitalise

    private _numberOne as integer
    private _numberTwo as integer
    private _initalised as boolean

    Public Property NumberOne() as Integer
        Get
            return _numberOne
        End Get
        Set(value as Integer)

            if _initalised then
                'perform checks here'
            end if

            _numberOne = value 
        End Set
    End Property

    Public Property NumberTwo() as Integer
        Get
            return _numberTwo
        End Get
        Set(value as IntegeR)
            if _initalised then
                'perform checks here'
            end if

            _numberTwo = value 
        End Set
    End Property

    Public Sub BeginInit Implements ISupportInitalise.BeginInit
        _initalised = false
    End Sub

    Public Sub EndInit Implements ISupportInitalise.EndInit
        _initalised = true

        'perform all checks here'
    End Sub

End Class

这样,您的所有检查都可以被禁用,直到您的对象完全初始化为止。

答案 1 :(得分:0)

您可以检查覆盖Text setter是否设置为controlName#,如果是,则不执行任何操作。