目标是新做的textbook控件只接收键盘输入的数字。但是我测试的时候根本没有反应,不管输入什么字符,textbook都会接受。是不是哪个地方是错误的,请达人给指出错误,谢谢!using System;
using System.Collections.Generic;
using System.Text;namespace WindowsControlLibrary4
{
public class Class1 : System.Windows.Forms.TextBox
{
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == 0x0102 && !Char.IsControl((char)m.LParam))
{
if (Char.IsNumber((char)m.LParam))
base.WndProc(ref m);
else return;
}
else
base.WndProc(ref m);
}
}
}
using System.Collections.Generic;
using System.Text;namespace WindowsControlLibrary4
{
public class Class1 : System.Windows.Forms.TextBox
{
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == 0x0102 && !Char.IsControl((char)m.LParam))
{
if (Char.IsNumber((char)m.LParam))
base.WndProc(ref m);
else return;
}
else
base.WndProc(ref m);
}
}
}
解决方案 »
- C#中,静态方法所耗内存会释放吗?
- winform动态加载误操作怎么撤销?
- 编写TCPView一类的软件的问题
- 熟悉.NET的以下条件,在国内一线城市一个月值多少钱?
- 关于窗体的问题,请大哥们帮帮忙,急急急急急!!!
- 怎么根据概率随机输出
- 怎么把STRING转换成双精度类型?
- 特别菜的问题,几乎不敢在这里提,可又解决不了……
- SESSION问题?为什么DATAGRID里的一个选择列,一点击之后SESSION就丢失了??
- HttpContext.Current.Response.End()方法后页面没有响应的问题?
- 用过FCKeditor手高请进来
- 跪求VS2005+MSSQL2K能人高手帮帮小弟解决数据库的问题
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
using System.Windows.Forms;namespace Tangxu.Controls
{ [ToolboxItem(true)]
[ToolboxBitmap(typeof(System.Windows.Forms.TextBox))]
public class TextBox : System.Windows.Forms.TextBox, IUIControlSkin
{
[DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); private Color _BorderColor = ControlCommon.BorderColor;
private bool _checkChar = false;
private bool _checkNum = false; #region 属性
[ Category("外观"),
Description("获得或设置控件的边框颜色")]
public Color BorderColor
{
get
{
return this._BorderColor;
}
set
{
this._BorderColor = value;
this.Invalidate();
}
}
[ Category("外观"),
Description("设置控件检查字母与数字"), DefaultValue(false)]
public bool CheckChar
{
get
{
return this._checkChar;
}
set
{
this._checkChar = value;
}
}
[Category("外观"),
Description("设置控件检查数字"), DefaultValue(false)]
public bool CheckNum
{
get
{
return this._checkNum;
}
set
{
this._checkNum = value;
}
}
#endregion 属性 /// <summary>
///
/// </summary>
public TextBox():base()
{
// _BorderColor = Color.FromArgb(198,197,202);
_BorderColor = ControlCommon.BorderColor;
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
if (_checkChar || _checkNum)
{
this.ImeMode = ImeMode.Disable;
}
} protected override void WndProc(ref Message m)
{
base.WndProc (ref m);
if (m.Msg==0xf || m.Msg==0x133)
{
IntPtr hDC = GetWindowDC(m.HWnd);
if (hDC.ToInt32() == 0)
{
return;
} if(this.BorderStyle == System.Windows.Forms.BorderStyle.FixedSingle)
{
Pen pen = new Pen(this._BorderColor,1);
pen.Color = this._BorderColor ;
Graphics g = Graphics.FromHdc(hDC);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.DrawRectangle(pen,0,0,this.Width-1, this.Height-1) ;
pen.Dispose();
}
m.Result = IntPtr.Zero;
ReleaseDC(m.HWnd,hDC);
}
} protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (_checkChar)
{
if (IsCharAndNum(e.KeyChar))
e.Handled = false;//允许输出
else
e.Handled = true;//禁止输出
} if (_checkNum)
{
if (IsNum(e.KeyChar))
e.Handled = false;//允许输出
else
e.Handled = true;//禁止输出
}
} private bool IsCharAndNum(char keyChar)
{
if (( keyChar >= 48 && keyChar <= 57 ) || ( keyChar >= 65 && keyChar <= 90 ) || ( keyChar >= 97 && keyChar <= 122 ) || keyChar == 32 || keyChar == 8 )
return true;
else
return false;
} private bool IsNum(char keyChar)
{
if ((keyChar >= 48 && keyChar <= 57))
return true;
else
return false; } public void SkinChanged(UISkin newSkin)
{
}
}
}