我一直在寻找一种在用户输入数据时使用TextBox
格式的方法。
我已经制作了一个可以实现我想要的黑客攻击,但是由于你不小心按下两个键可能会导致if
语句失败以及尝试通过用户Delete Key
。
无论如何,这不是问题,这是我现在使用的代码:
从这个类调用方法,第一个方法向字符串添加逗号,第二个方法检查用户输入完成后是否有逗号。
class BonusData
{
public class DoDataTextBox
{
public static void AutoComplete(TextBox textBox, int counter)
{
if (textBox.Text.Length - counter == 3)
{
textBox.Text = textBox.Text + ",";
textBox.SelectionStart = textBox.Text.Length;
}
else if (textBox.Text.Length - counter == 7)
{
textBox.Text = textBox.Text + ",";
textBox.SelectionStart = textBox.Text.Length;
}
else if (textBox.Text.Length - counter == 11)
{
textBox.Text = textBox.Text + ",";
textBox.SelectionStart = textBox.Text.Length;
}
}
public static void CheckLastCharacter(TextBox textBox)
{
if (textBox.Text.Length < 2) return;
if (textBox.Text.Substring(textBox.Text.Length - 1) != ",") return;
{
textBox.Text = textBox.Text.Substring(0, textBox.Text.Length - 1);
}
}
}
}
事件处理程序,
private void SecondMonthRowOne_OnKeyUp(object sender, KeyEventArgs e)
{
int counter = 0;
if (IsText)
{
counter = 1;
}
BonusData.DoDataTextBox.AutoComplete((TextBox)sender, counter);
}
private void SecondMonthRowOne_OnGotFocus(object sender, RoutedEventArgs e)
{
if (e.ToString() != String.Empty) return;
IsText = true;
}
private void SecondMonthRowOne_OnLostFocus(object sender, RoutedEventArgs e)
{
BonusData.DoDataTextBox.CheckLastCharacter((TextBox)sender);
IsText = false;
}
这给出了这样的结果,
999999999
就像我说它在98%的时间里工作一样,但我希望在WPF中有另一种方法可以做到这一点。我搜索的范围很广,但我甚至都不知道这是什么东西。
答案 0 :(得分:0)
我建议您使用&#34; WPF TextBox AutoComplete&#34;代替。它是一个包含在NuGet包中的WPF附加行为。
您可以使用NuGet包管理器为您的WPF项目添加此包,只需将此包添加到您的项目中。 这个NuGet包也是开源的,因此您可以进一步定制它以满足您的需求/要求。
源代码托管在此GitHub仓库:https://github.com/Nimgoble/WPFTextBoxAutoComplete
注意:我还没有针对.NET 4.6对这个WPF库进行全面测试。该库是以.NET 4.5为目标编译的。但据我所知,它与.NET 4.6中的WPF 100%兼容。
答案 1 :(得分:0)
没有使用任何外部插件,我发现这个工作非常好,
这将每隔三个字符添加一个Comma
,并允许用户一次删除一个字符。
TextBox
格式如下所示,
999,999,999,999
代码,
public class DoDataTextBox
{
public static void AutoCompleteStringBuild(TextBox textBox)
{
string endResult = null;
string replace = Reverse(textBox.Text).Replace(",", "");
int count = 1;
char[] value = replace.ToCharArray();
foreach (var car in value)
{
if (count % 3 == 0)
{
endResult = String.Concat(endResult, car);
if (value.Length != count)
{
endResult = String.Concat(endResult, ",");
}
count++;
}
else
{
endResult = String.Concat(endResult, car);
count++;
}
}
if (endResult == null) return;
string textBoxResult = Reverse(endResult);
textBox.Text = textBoxResult;
}
public static string Reverse(string stringVal)
{
char[] charArray = stringVal.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
public static void IsDeleteKey(TextBox textBox, KeyEventArgs e)
{
textBox.SelectionStart = e.Key == Key.Delete ? 0 : textBox.Text.Length;
}
}
事件处理程序,
private void TextBoxOne_OnKeyUp(object sender, KeyEventArgs e)
{
BonusData.DoDataTextBox.AutoCompleteStringBuild((TextBox)sender);
BonusData.DoDataTextBox.IsDeleteKey((TextBox)sender, e);
}
目前,这是我发现的最佳方式。