【问题标题】:Problem with set related property in designer at first time第一次在设计器中设置相关属性的问题
【发布时间】:2010-12-10 21:43:32
【问题描述】:

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

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

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

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

如何解决这个问题?

提前致谢
哈米德

【问题讨论】:

    标签: .net winforms designer propertygrid design-time


    【解决方案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
    

    这样,在您的对象完全初始化之前,您可以禁用所有检查。

    【讨论】:

    • 我无法设置 Readonly 属性,因为用户可以更改它,但我需要这个:“告诉表单设计器它应该按特定顺序设置属性的方法”。请问能找到链接吗? (我也会这样做)非常感谢
    • 现在我想它可能不是一个网页,它可能在我的一本书中。
    • 好的,我很确定它在书里,我回家后会更新,可以看看书。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2015-03-20
      • 2013-02-28
      • 2018-11-19
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多