110,500
社区成员
发帖
与我相关
我的任务
分享
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_PASTE:
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Text))//粘贴的内容是否是文本
{
string str;
str = (String)iData.GetData(DataFormats.Text);
if (Regex.IsMatch(str, MatchString)) //文本内容是不是数字
{
break;
}
}
m.Result = IntPtr.Zero;
return;
case WM_CHAR:
int keyChar = m.WParam.ToInt32();
bool charIsNumber = (keyChar >= 48 && keyChar <= 57) || (keyChar >= 65296 && keyChar <= 65305); //数字
bool charIsCommand =
keyChar == 8 || //退格
keyChar == 26 || //撤销
keyChar == 3 || keyChar == 22 || keyChar == 24;//拷贝、粘贴、剪切
bool charIsDot = keyChar == 46; //.
int dotIndex = Text.IndexOf('.');
if (charIsNumber)
{
if (dotIndex != -1)
{
if (SelectionStart > dotIndex)
{
if (Text.Length - dotIndex > DecimalDigits)
{
m.WParam = IntPtr.Zero;
}
}
}
}
else if (charIsDot)
{
if (dotIndex != -1)
{
if (SelectionStart > dotIndex ||
dotIndex > SelectionStart + SelectionLength)
{
m.WParam = IntPtr.Zero;
}
}
else
{
if (Text.Length - SelectionStart > DecimalDigits)
{
m.WParam = IntPtr.Zero;
}
}
}
else if (!charIsCommand)
{
m.WParam = IntPtr.Zero;
}
break;
}
base.WndProc(ref m);
}