2

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

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

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

4

3 回答 3

1

您在这里有两个选择。

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

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

于 2009-01-09T16:18:15.697 回答
0

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

例子:

   class Class1:TextBox{
        public Class1():base(){
            this.TextAlign = HorizontalAlignment.Center;
            this.Dock = DockStyle.Left;
        }
    }
于 2009-01-09T16:15:47.140 回答
0

在我的项目中,我有类似的需求。我所做的是监听 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
于 2009-01-09T16:30:08.653 回答