我一直在處理自定義文本框控件,它只允許字母數字字符。請注意,我沒有限制KeyPress,KeyUp事件中的字符,因爲我不想限制複製/粘貼或任何其他應該允許的操作。我只修剪了粘貼操作中的非字母數字字符。但是,我不確定我寫的代碼是好還是壞,因爲我對桌面應用程序的經驗很少。C#Winforms:有什麼方法可以改進這個簡單的自定義文本框代碼嗎?
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();
}
}
}
我認爲這將是更好的[代碼評論](http://codereview.stackexchange.com/) – V4Vendetta 2011-12-20 07:27:00
嘿,Code Review是一個很好的主意。我可以直接將這篇文章轉換爲Code Review,還是需要重新發布? – 2011-12-20 10:17:11