我有3个TextBoxes(Id1,Name和Salary).Id并且Salary应该包含整数,并且Name只应包含字符.我需要对TextBox进行验证,它应该在输入错误的字符或整数时显示错误.也可以只在没有代码隐藏的Xaml中完成吗?请帮我提供所需的代码
这是Xaml代码:
<TextBox Name="tb1" HorizontalAlignment="Left" Height="20" Margin="60,10,0,0" TextWrapping="NoWrap" Text="{Binding SelectedItem.Id,ElementName=dgsample}" VerticalAlignment="Top" Width="100" />
<TextBox Name="tb2" HorizontalAlignment="Left" Height="20" Margin="60,60,0,0" TextWrapping="NoWrap" Text="{Binding SelectedItem.Name, ElementName=dgsample}" VerticalAlignment="Top" Width="100"/>
<TextBox Name="tb3" HorizontalAlignment="Left" Height="20" Margin="60,110,0,0" TextWrapping="NoWrap" Text="{Binding SelectedItem.Salary, ElementName=dgsample}" VerticalAlignment="Top" Width="100"/>
Run Code Online (Sandbox Code Playgroud) 我希望用户只输入数值TextBox.
我得到了这段代码:
private void txtType1_KeyPress(object sender, KeyPressEventArgs e)
{
int isNumber = 0;
e.Handled = !int.TryParse(e.KeyChar.ToString(), out isNumber);
}
Run Code Online (Sandbox Code Playgroud)
但我在使用WPF 时没有得到textbox_KeyPress事件e.KeyChar.
什么是WPF的解决方案?
Edit:
我做了一个解决方案!
private void txtName_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
CheckIsNumeric(e);
}
private void CheckIsNumeric(TextCompositionEventArgs e)
{
int result;
if(!(int.TryParse(e.Text, out result) || e.Text == "."))
{
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个只接受特定范围内的数值的TextBox.实现此类TextBox的最佳方法是什么?
我想到了派生TextBox并覆盖TextProperty的验证和强制.但是,我不知道如何做到这一点,我知道通常不建议派生WPF控件.
private void textBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
int result;
if (!validateStringAsNumber(e.Text,out result,false))
{
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
(validateStringAsNumber是我主要使用Int.TryParse的函数)
一些建议的解决方案可能更好,但对于我需要的简单功能,这个解决方案是最容易和最快的,同时足以满足我的需求.
我想验证用户输入以确保它们是整数.我该怎么做?我想到使用IDataErrorInfo哪种似乎是在WPF中进行验证的"正确"方法.所以我尝试在我的ViewModel中实现它.
但事情是我的文本框绑定到一个整数字段,并且没有任何需要验证是否int是一个int.我注意到WPF会自动在文本框周围添加一个红色边框,以通知用户错误.基础属性不会更改为无效值.但我想通知用户这个.我该怎么做?
如何将TextBox转换为int或WPF中是否只有一个仅支持数字的框?
我想在WPF中创建一个只接受数字的文本框...我已经重新申请并且人们说使用按键事件或屏蔽文本框,但它们是在Windows窗体中...
我有一个TextBoxWPF.我想限制文本的长度TextBox.有一种简单的方法可以限制属性的字符数MaxLength.
在我的用例中,我需要限制文本而不是字符数,而是限制给定编码中文本的二进制表示的长度.由于德国人使用的程序有一些变音符号,它消耗两个字节.
我已经有一个方法,检查给定的字符串是否适合给定的长度:
public bool IsInLength(string text, int maxLength, Encoding encoding)
{
return encoding.GetByteCount(text) < maxLength;
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何以某种方式将此功能绑定到文本框,用户不可能输入太多字符来超过最大字节长度.
没有EventHandler的解决方案是首选,因为TextBox位于DataTemplate中.
PreviewTextInput在 WPF 中处理TextBox的事件时,事件参数 ( TextCompositionEventArgs)的 Text 属性是否可以包含通过键盘输入的最后一个字符以外的字符?
我对它进行了彻底的测试,它似乎只包含最后一个按键的单个字符值。但是,我可能遗漏了一些明显的东西,因为它的类型是String而不是Char.
我试图创建一个TextBox只允许数字字符和小数点.我在编写代码时不需要帮助,但是在概念上.我MVVM用来设计WPF应用程序,我不确定是使用事件还是事件命令.
我已经阅读了几个关于这个主题的不同观点:
MVVM):永远不会有任何代码View.要防止这种情况,请使用MVVM Light Library.简而言之,将事件转换为命令,以便可以控制所有内容ViewModel.MVVM):并非一切都必须在处理中,ViewModel并且可以创建Events来处理某些UI要求.由于简单性,我更倾向于第二种选择,正如我之前所说,第一种选择似乎有点极端.在我的具体情况下(仅创建一个数字TextBox),大多数人会更喜欢上述选项中的任何一个或我没有发现的选项吗?
这是该程序的屏幕截图.如你所见,我把输出格式设为我想要的样子.我用过这段代码:
<DataGridTextColumn Header="Price" Binding="{Binding Path=Price, StringFormat=C, ConverterCulture='de-DE'}"/>
如何使文本框接受仅作为输入数字作为货币格式,或如何在键入时使其自动形成?我尝试了几个我在这里和那里找到的代码,但它没有用.希望有人可以帮助我并给我一些详细的信息.数据必须保存在SQL Server数据库中,到目前为止我使用的是LINQ.
我需要创建一个仅包含数字的TextBox,但是我做不到。我试过了:InputScope =“ Numbers”,但这仅适用于Mobile。我也尝试过TextChanging这个:
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "[^0-9]"))
{
textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一个wpf应用程序,我想得到文本框的值我想使用KeyDown和KeyPress来检查文本是否是一个数值但是当我写KeyPress时,编译器强调了这一点,所以我不能使用它.
private void sb_KeyDown_1(object sender, System.Windows.Input.KeyEventArgs e)
{
nonNumberEntered = false;
// Determine whether the keystroke is a number from the top of the keyboard.
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
{
// Determine whether the keystroke is a number from the keypad.
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
{
// Determine whether the keystroke is a backspace.
if (e.KeyCode != Keys.Back)
{
// A non-numerical keystroke was pressed.
// Set the flag to true and …Run Code Online (Sandbox Code Playgroud) 我使用了一个 WPF 应用程序,我只想在文本框中允许数字。在 WindowsForm 应用程序中,我会知道我必须如何制作它。
不幸的是,WPF 中没有 KeyPress,并且“代码”也不再起作用。
它是如何正确的,事件是什么?
在这里您可以看到在 Windows 窗体中工作的旧代码:
private void tbKreisdurchmesser_KeyPress(object sender, KeyEventArgs e)
{
if (char.IsNumber(e.Key) || e.KeyChar==".")
{
}
else
{
e.Handled = e.KeyChar != (char)Keys.Back;
}
}
Run Code Online (Sandbox Code Playgroud) c# ×12
wpf ×12
textbox ×6
validation ×4
xaml ×3
mvvm ×2
.net ×1
data-binding ×1
events ×1
input ×1
maxlength ×1
mvvm-light ×1
numbers ×1
numeric ×1
uwp ×1