Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的自定义Windows控件库#_C#_Textbox_Custom Controls - Fatal编程技术网

C# C语言中的自定义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) {

我已经使用Windows窗体控件库创建了一个自定义的文本框,它有
数字文本框
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)