如何实施一个应用程序范围的策略来强制文本大写?

时间:2010-10-14 13:28:55

标签: c# winforms text datagridview textbox

我正在使用.Net(C#,WinForms,Linq to SQL,SQL Server 2008)来开发一个新的业务线应用程序,它将取代一个狡猾的旧Foxpro应用程序。我没有编写旧的应用程序,但确实提供了支持,我是新应用程序的内部开发人员。

多年前使用Foxpro应用程序做出的设计决策之一就是强制所有输入的文本都是大写的。这是为了确保所有文本都有统一的销售报告,邮件列表等格式。

我和一些用户之间当前的对话主题是,是否应该在新应用中继续这样做。它看起来很可能会继续下去。

我的问题是,实现这一目标的最佳策略是什么,尽可能少花费我的时间?

总是必须记住设置每个的CharacterCasing属性,这感觉真是一种拖累。单。文本框。我放到了表格上。并且看起来DataGridViews甚至没有设置简单的属性;您已手动处理CellChanged事件等。

你会怎么做?

3 个答案:

答案 0 :(得分:1)

就个人而言,
我将构建一个包含所有应用程序所需控件(TextBoxes,DataGridViews等)的程序集,覆盖/自定义以获得所需的结果(在这种情况下为大写文本)。

通过这种方式,每个开发人员只需使用自定义控件,而不是.NET控件,并逐个更改属性。
此外,您将拥有一个集中点来控制应用程序UI行为。

DataGridView示例:

public class UpperCaseDataGrid : DataGridView
{
    protected override void OnEditingControlShowing(DataGridViewEditingControlShowingEventArgs e)
    {
        var txtBox = EditingControl as TextBox;
        if (txtBox != null)
            txtBox.CharacterCasing = CharacterCasing.Upper;

        base.OnEditingControlShowing(e);
    }
}

答案 1 :(得分:1)

我建议您为TextBox,DataGridView以及任何其他想要将其大写的控件创建自己的User Control

这样,您只需将用户控件拖放到应用程序中的任何表单即可。

示例代码:

public partial class CapTextBox : UserControl
{
    public CapTextBox()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        textBox1.Text = textBox1.Text.ToUpper();
        textBox1.SelectionStart = textBox1.Text.Length;
    }
}

答案 2 :(得分:1)

感谢所有贡献者。我认为digEmAll特别有最好的答案。但是,我发布了我的完整实现作为答案,以便让那些发现这些问题的人受益。

UpperCaseTextBox实现:

public class UpperCaseTextBox : TextBox
{
    public UpperCaseTextBox()
        : base()
    {
        base.CharacterCasing = this.CharacterCasing;
    }

    private CharacterCasing _characterCasing = CharacterCasing.Upper;
    [DefaultValue(CharacterCasing.Upper)]
    public new CharacterCasing CharacterCasing
    {
        get
        {
            return _characterCasing;
        }
        set
        {
            base.CharacterCasing = value;
            _characterCasing = value;
        }
    }
}

UpperCaseDataGridView实现:

public class UpperCaseDataGridView : DataGridView
{
    private CharacterCasing _textBoxCharacterCasing = CharacterCasing.Upper;
    [CategoryAttribute("Behavior")]
    [DescriptionAttribute("Sets CharacterCasing of all contained TextBox controls.")]
    [DefaultValue(CharacterCasing.Upper)]
    public CharacterCasing TextBoxCharacterCasing
    {
        get
        {
            return _textBoxCharacterCasing;
        }
        set
        {
            _textBoxCharacterCasing = value;
        }
    }

    protected override void OnEditingControlShowing(DataGridViewEditingControlShowingEventArgs e)
    {
        var txtBox = EditingControl as TextBox;
        if (txtBox != null)
            txtBox.CharacterCasing = this.TextBoxCharacterCasing;

        base.OnEditingControlShowing(e);
    }
}

可以使用比上面更少的代码来实现此功能,但是,我故意针对灵活,强大的实现与“属性”窗口一起使用,允许我在需要的情况下覆盖大写,而不必撕掉控制和替换香草控制等

再次感谢所有贡献者。