gpt4 book ai didi

c# - Silverlight 数字文本框?

转载 作者:行者123 更新时间:2023-11-30 21:23:08 25 4
gpt4 key购买 nike

我尝试创建自己的数字文本框,这是我的代码:

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);
}
}

一切都像预期的那样工作,但是如果你按下 alt 和一些数字,它会创建与数字对应的 ascii 符号。有什么方法可以阻止“alt + 数字组合?似乎只是输入了 alt + 键而没有抛出 OnKeyUp 或 OnKeyDown ...

最佳答案

我通过使用 TextChanged 事件让它工作,这里是我的代码...

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);
}
}

关于c# - Silverlight 数字文本框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1977202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com