C#Winforms:有没有办法改进这个简单的自定义Textbox代码?

时间:2011-12-20 07:20:40

标签: c# winforms custom-controls

我一直在使用Custom TextBox控件,它只允许使用字母数字字符。请注意,我没有限制来自KeyPress,KeyUp事件的字符,因为我不想限制复制/粘贴或一般应该允许的任何其他操作。我只在粘贴操作上修剪了非字母数字字符。但是,我不确定我写的代码是好还是坏,因为我对桌面应用程序的经验很少。

using System;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace SaintThomas.UserControls
{
    class TextBoxForUserName : TextBox
    {
        protected override void OnTextChanged(EventArgs e)
        {
            base.OnTextChanged(e);

            this.SuspendLayout();
            int startPos = this.SelectionStart;
            if (Regex.IsMatch(this.Text, "[^0-9_A-Z]", RegexOptions.IgnoreCase))
            {
                int reduceStartPos = this.Text.Length;
                this.Text = Regex.Replace(this.Text, "[^0-9_A-Z]", "", RegexOptions.IgnoreCase);
                startPos = (startPos <= 0) ? 0 : startPos - (reduceStartPos - this.Text.Length);
                if (this.Text.Length < startPos)
                {
                    startPos = this.Text.Length;
                }
                this.SelectionStart = startPos;
            }
            this.ResumeLayout();
        }
    }
}

2 个答案:

答案 0 :(得分:4)

执行此操作的最佳方法是使用MaskedTextBox control

当你不必这样做时,没有理由重新发明轮子。

答案 1 :(得分:0)

乍一看,第一个if条件似乎完全没必要,因为如果你把它留下来,代码也会这样做。