我正在使用.Net(C#,WinForms,Linq to SQL,SQL Server 2008)来开发一个新的业务线应用程序,它将取代一个狡猾的旧Foxpro应用程序。我没有编写旧的应用程序,但确实提供了支持,我是新应用程序的内部开发人员。
多年前使用Foxpro应用程序做出的设计决策之一就是强制所有输入的文本都是大写的。这是为了确保所有文本都有统一的销售报告,邮件列表等格式。
我和一些用户之间当前的对话主题是,是否应该在新应用中继续这样做。它看起来很可能会继续下去。
我的问题是,实现这一目标的最佳策略是什么,尽可能少花费我的时间?
总是必须记住设置每个的CharacterCasing属性,这感觉真是一种拖累。单。文本框。我放到了表格上。并且看起来DataGridViews甚至没有设置简单的属性;您已手动处理CellChanged事件等。
你会怎么做?
答案 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);
}
}
可以使用比上面更少的代码来实现此功能,但是,我故意针对灵活,强大的实现与“属性”窗口一起使用,允许我在需要的情况下覆盖大写,而不必撕掉控制和替换香草控制等
再次感谢所有贡献者。