【问题标题】:Windows .Net controls - Creating property templatesWindows .Net 控件 - 创建属性模板
【发布时间】:2009-01-09 16:12:17
【问题描述】:

假设我的 .Net Windows 应用程序中通过将 TextBox 控件拖到表单编辑器上创建的所有文本框控件都应具有以下默认属性(某些文本框实例可以覆盖这些属性):

文本对齐:居中
调整大小:根据内容
Dock:左、上和右

现在,每次需要时都设置这些属性变得繁琐且手动无聊。有什么方法可以将这些属性默认为“程序集级别”。 我知道用户控件会解决问题,但我认为这是一个代价高昂的解决方案,我认为应该有一个更简单、更优雅的解决方案来解决这个问题。 谢谢

【问题讨论】:

    标签: .net controls design-time


    【解决方案1】:

    这里有两个选择。

    首先是创建一个方法,它遍历表单上的所有嵌套控件,并选择文本框并更改属性,然后在表单的初始化代码中调用此属性。

    另一个是继承有问题的文本框控件,并在其构造函数中根据自己的喜好更改属性(并且可能隐藏属性以向属性网格公开不同的默认值)。要使该控件在表单设计器中可用,必须在与其应该使用的地方分开的项目中创建它,然后在第一个项目中引用。

    【讨论】:

    • 控件不需要创建单独的项目,但是是一种很好的编程习惯。
    【解决方案2】:

    是的,在自定义控件中继承,并在默认构造函数中设置默认属性。

    例子:

       class Class1:TextBox{
            public Class1():base(){
                this.TextAlign = HorizontalAlignment.Center;
                this.Dock = DockStyle.Left;
            }
        }
    

    【讨论】:

      【解决方案3】:

      在我的项目中,我也有类似的需求。 我所做的是监听 Co​​ntrolAdded 事件,并检查该控件是否属于所需类型...我设置了这些属性。

      要真正实现自动化...您应该将此类逻辑放在表单基类中。在我的例子中,我所有的表单都继承自一个基础表单,其逻辑是绘制渐变背景并为我的表单设置标准属性(图标、边框等)。

      在下面的示例中,我使用了一个名为“MGButton”的控件并设置了它的属性。你可以在这里做一个 CASE 来自定义你的所有控件。我还使用自定义属性来了解何时不使用默认值。

      Private Sub FormBase_ControlAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.ControlEventArgs) Handles MyBase.ControlAdded
              If e.Control.GetType().ToString = "CommonUI.MGButton" Then
                  Dim boton As CommonUI.MGButton = CType(e.Control, CommonUI.MGButton)
                  With boton
                      If CType(.Tag, String) <> "OverrideDefaults" Then
                          .ColorBorde = System.Drawing.Color.Black
                          .ColorBordeFocus = System.Drawing.Color.Transparent
                          .ColorFinal = System.Drawing.Color.NavajoWhite
                          .ColorFinalDisabled = System.Drawing.Color.WhiteSmoke
                          .ColorFinalOver = System.Drawing.Color.Sienna
                          .ColorInicial = System.Drawing.Color.Peru
                          .ColorInicialDisabled = System.Drawing.Color.SeaShell
                          .ColorInicialOver = System.Drawing.Color.Sienna
                      End If
                  End With       
              End If
          End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 2013-01-29
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多