C# C语言中的自定义Windows控件库#
我已经使用Windows窗体控件库创建了一个自定义的文本框,它有C# C语言中的自定义Windows控件库#,c#,textbox,custom-controls,C#,Textbox,Custom Controls,我已经使用Windows窗体控件库创建了一个自定义的文本框,它有数字文本框,Alpa数字文本框,十进制等选项 为此,我已重写了预处理消息(ref Message msg)方法 下面是我的数字文本框的示例代码片段 public override bool PreProcessMessage(ref Message msg) { int WM_KEYDOWN = 0x0100; if (msg.Msg == WM_KEYDOWN) {
数字文本框
,Alpa数字文本框
,十进制
等选项
为此,我已重写了预处理消息(ref Message msg)
方法
下面是我的数字文本框的示例代码片段
public override bool PreProcessMessage(ref Message msg)
{
int WM_KEYDOWN = 0x0100;
if (msg.Msg == WM_KEYDOWN)
{
Keys keys = (Keys)msg.WParam.ToInt32();
bool bNumbers = false;
switch (eType)
{
case enTextBoxTypes.Numeric:
bNumbers = ((keys >= Keys.D0 && keys <= Keys.D9) || (keys >= Keys.NumPad0 && keys <= Keys.NumPad9)) && ModifierKeys != Keys.Shift;
System.Diagnostics.Debug.Print(bNumbers.ToString());
if ((keys == Keys.OemMinus || keys == Keys.Subtract) && bAllowMinusSign && ModifierKeys != Keys.Shift)
{
bIsOEMMinus = (keys == Keys.OemMinus) | (keys == Keys.Subtract);
if ((this.Text.Length != this.SelectedText.Length || !bAllowMinusSign) && this.SelectionStart != 0)
bIsOEMMinus = false;
}
break;
}
bool bDel = keys == Keys.Delete;
bool bBack = keys == Keys.Back;
bool arrows = (keys == Keys.Up) | (keys == Keys.Down) | (keys == Keys.Left) | (keys == Keys.Right);
bool Enter = (keys == Keys.Enter);
bool ESC = (keys == Keys.Escape);
bool TAB = (keys == Keys.Tab);
bool Home = (keys == Keys.Home);
bool End = (keys == Keys.End);
if (bNumbers bBack | bDel | arrows | Home | End | bIsOEMMinus)
return false;
else if(TAB)
return base.PreProcessMessage(ref msg);
else
return true;
}
else
return base.PreProcessMessage(ref msg);
}
public override bool预处理消息(ref Message msg)
{
int WM_KEYDOWN=0x0100;
如果(msg.msg==WM_KEYDOWN)
{
Keys key=(Keys)msg.WParam.ToInt32();
布尔b数=假;
开关(eType)
{
案例enTextBoxTypes。数字:
bNumbers=((keys>=keys.D0&&keys=keys.NumPad0&&keys如果这是你的问题,也许你可以使用一个屏蔽文本框。因为我看到你已经使用了KeyDown,我想你知道如何处理。
也许您可以继承textbox控件并更改ContextChanged和onkeydown事件。看看链接,他使用了这两个事件。(但不要看名称)
如果你认为无论出于什么原因,这对你都没有帮助,请向我解释是什么束缚了你
Me.MaskedTextBox1.Mask = "00/00/0000"
MaskedTextBox1.ValidatingType = GetType(System.DateTime)