Silverlight的数字文本框? [英] Silverlight numeric textbox?

查看:162
本文介绍了Silverlight的数字文本框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我trye​​d在这里创建自己的数字文本框是我的代码:

 公共类NumericTextBox:文本框
{

公共NumericTextBox()
:碱()
{
this.Text =0;
}

私人无效HandleKeyEvent(KeyEventArgs E)
{
e.Handled = TRUE;
如果((Keyboard.Modifiers&安培;!ModifierKeys.Alt)= 0)
{
的回报;
}
如果(e.Key == || Key.Back == e.Key || Key.Delete == e.Key || Key.Left == e.Key Key.Right | |
e.Key == || Key.D0 == e.Key || Key.D1 == e.Key || Key.D2 == e.Key || Key.D3 == e.Key Key.D4 || e.Key == || Key.D5 == e.Key || Key.D6
e.Key == || Key.D7 == e.Key || Key.D8Ë 。重点== || Key.D9
e.Key == || Key.NumPad0 == e.Key || Key.NumPad1 == e.Key || Key.NumPad2 == e.Key重点。 NUMPAD3 || e.Key == || Key.NumPad4 == e.Key || Key.NumPad5 == e.Key || Key.NumPad6
e.Key == || Key.NumPad7 e.Key == || Key.NumPad8 == e.Key Key.NumPad9)
{
e.Handled = FALSE;
}
,否则如果((e.Key == || Key.Subtract(e.Key == Key.Unknown&放大器;&安培; e.PlatformKeyCode == 189))及和放大器;基地。 SelectionStart == 0安培;及(!base.Text.Length == 0 || base.Text [0] =' - '))
{
e.Handled = FALSE;
}
}

保护覆盖无效的onkeydown(KeyEventArgs E)
{
HandleKeyEvent(E);
base.OnKeyDown(E);
}

保护覆盖无效的onkeyup(KeyEventArgs E)
{
HandleKeyEvent(E);
base.OnKeyUp(E);
}
}



一切工作像应该,但如果您按下ALT和一些数它创建对应数字的ASCII符号..有什么办法来阻止ALT +数字的组合?
似乎ALT +键只是获取而不去扔的onkeyup或...的onkeydown

解决方案

我把它用在这里使用TextChanged事件的工作是我的代码...

 公共类NumericTextBox:文本框
{

int值;

公共NumericTextBox()
:基()
{
this.Text =0;
this.TextChanged =新TextChangedEventHandler(NumericTextBox_TextChanged);
}

空隙NumericTextBox_TextChanged (对象发件人,TextChangedEventArgs E)
{
INT selectionStart = base.SelectionStart;
布尔改变= FALSE;
名单<焦炭> charList =新的List<焦炭>();
的for(int i = 0; I< base.Text.Length;我++)
{
如果(IsValidChar(base.Text [I],i))的
{
charList.Add(base.Text [I]);
}
,否则
{
如果(selectionStart> = 1)
{
selectionStart--;
}
改变= TRUE;
}
}
如果(更改)
{
字符串文本=新的字符串(charList.ToArray());
this.Text =文本;
this.SelectionStart = selectionStart;
}
INT为newValue;
如果(int.TryParse(this.Text,出newValue)以!)
{
this.Text = value.ToString();
this.SelectionStart = this.Text.Length;
}
,否则
{
值=为newValue;
}
}

私人布尔IsValidChar(字符C,INT指数)
{
回报率((三==' - '和;&安培;指数== 0)||ç=='0'||ç=='1'||ç=='2'||ç=='3'||ç=='4'||ç== '5'||ç=='6'||ç=='7'||ç=='8'||ç=='9');
}

私人无效HandleKeyEvent(KeyEventArgs E)
{
e.Handled = TRUE;
如果((Keyboard.Modifiers&安培; ModifierKeys.Control)== ModifierKeys.Control)
{
e.Handled = FALSE;
}
如果(e.Key == || Key.Back == e.Key || Key.Delete == e.Key || Key.Left == e.Key Key.Right | |
e.Key == || Key.D0 == e.Key || Key.D1 == e.Key || Key.D2 == e.Key || Key.D3 == e.Key Key.D4 || e.Key == || Key.D5 == e.Key || Key.D6
e.Key == || Key.D7 == e.Key || Key.D8Ë 。重点== || Key.D9
e.Key == || Key.NumPad0 == e.Key || Key.NumPad1 == e.Key || Key.NumPad2 == e.Key重点。 NUMPAD3 || e.Key == || Key.NumPad4 == e.Key || Key.NumPad5 == e.Key || Key.NumPad6
e.Key == || Key.NumPad7 e.Key == || Key.NumPad8 == e.Key Key.NumPad9)
{
e.Handled = FALSE;
}
,否则如果((e.Key == || Key.Subtract(e.Key == Key.Unknown&放大器;&安培; e.PlatformKeyCode == 189))及和放大器;基地。 SelectionStart == 0安培;及(!base.Text.Length == 0 || base.Text [0] =' - '))
{
e.Handled = FALSE;
}
}

保护覆盖无效的onkeydown(KeyEventArgs E)
{
HandleKeyEvent(E);
base.OnKeyDown(E);
}

保护覆盖无效的onkeyup(KeyEventArgs E)
{
HandleKeyEvent(E);
base.OnKeyUp(E);
}
}


I tryed to create my own numeric textbox here is my code:

public class NumericTextBox : TextBox
{

    public NumericTextBox()
        : base()
    {
        this.Text = "0";
    }

    private void HandleKeyEvent(KeyEventArgs e)
    {
        e.Handled = true;
        if ((Keyboard.Modifiers & ModifierKeys.Alt) != 0)
        {
            return;
        }
        if (e.Key == Key.Back || e.Key == Key.Delete || e.Key == Key.Left || e.Key == Key.Right ||
            e.Key == Key.D0 || e.Key == Key.D1 || e.Key == Key.D2 || e.Key == Key.D3 || e.Key == Key.D4 || e.Key == Key.D5 || e.Key == Key.D6 ||
            e.Key == Key.D7 || e.Key == Key.D8 || e.Key == Key.D9 ||
            e.Key == Key.NumPad0 || e.Key == Key.NumPad1 || e.Key == Key.NumPad2 || e.Key == Key.NumPad3 || e.Key == Key.NumPad4 || e.Key == Key.NumPad5 || e.Key == Key.NumPad6 ||
            e.Key == Key.NumPad7 || e.Key == Key.NumPad8 || e.Key == Key.NumPad9)
        {
            e.Handled = false;
        }
        else if ((e.Key == Key.Subtract || (e.Key == Key.Unknown && e.PlatformKeyCode == 189)) && base.SelectionStart == 0 && (base.Text.Length == 0 || base.Text[0] != '-'))
        {
            e.Handled = false;
        }
    }

    protected override void OnKeyDown(KeyEventArgs e)
    {
        HandleKeyEvent(e);
        base.OnKeyDown(e);
    }

    protected override void OnKeyUp(KeyEventArgs e)
    {
        HandleKeyEvent(e);
        base.OnKeyUp(e);
    }
}

everything works like supposed but if you press alt and some numbers it creates the ascii symbol corresponding to the number.. is there any way to block an "alt + number combination? it seems that alt + key just gets entered without going threw OnKeyUp or OnKeyDown...

解决方案

I got it working by using the TextChanged event here is my code...

public class NumericTextBox : TextBox
{

    int value;

    public NumericTextBox()
        : base()
    {
        this.Text = "0";
        this.TextChanged += new TextChangedEventHandler(NumericTextBox_TextChanged);
    }

    void NumericTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        int selectionStart = base.SelectionStart;
        bool changed = false;
        List<char> charList = new List<char>();
        for (int i = 0; i < base.Text.Length; i++)
        {
            if (IsValidChar(base.Text[i], i))
            {
                charList.Add(base.Text[i]);
            }
            else
            {
                if (selectionStart >= i)
                {
                    selectionStart--;
                }
                changed = true;
            }
        }
        if (changed)
        {
            string text = new string(charList.ToArray());
            this.Text = text;
            this.SelectionStart = selectionStart;
        }
        int newValue;
        if (!int.TryParse(this.Text, out newValue))
        {
            this.Text = value.ToString();
            this.SelectionStart = this.Text.Length;
        }
        else
        {
            value = newValue;
        }
    }

    private bool IsValidChar(char c, int index)
    {
        return ((c == '-' && index == 0) || c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9');
    }

    private void HandleKeyEvent(KeyEventArgs e)
    {
        e.Handled = true;
        if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
        {
            e.Handled = false;
        }
        if (e.Key == Key.Back || e.Key == Key.Delete || e.Key == Key.Left || e.Key == Key.Right ||
            e.Key == Key.D0 || e.Key == Key.D1 || e.Key == Key.D2 || e.Key == Key.D3 || e.Key == Key.D4 || e.Key == Key.D5 || e.Key == Key.D6 ||
            e.Key == Key.D7 || e.Key == Key.D8 || e.Key == Key.D9 ||
            e.Key == Key.NumPad0 || e.Key == Key.NumPad1 || e.Key == Key.NumPad2 || e.Key == Key.NumPad3 || e.Key == Key.NumPad4 || e.Key == Key.NumPad5 || e.Key == Key.NumPad6 ||
            e.Key == Key.NumPad7 || e.Key == Key.NumPad8 || e.Key == Key.NumPad9)
        {
            e.Handled = false;
        }
        else if ((e.Key == Key.Subtract || (e.Key == Key.Unknown && e.PlatformKeyCode == 189)) && base.SelectionStart == 0 && (base.Text.Length == 0 || base.Text[0] != '-'))
        {
            e.Handled = false;
        }
    }

    protected override void OnKeyDown(KeyEventArgs e)
    {
        HandleKeyEvent(e);
        base.OnKeyDown(e);
    }

    protected override void OnKeyUp(KeyEventArgs e)
    {
        HandleKeyEvent(e);
        base.OnKeyUp(e);
    }
}

这篇关于Silverlight的数字文本框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆