获取C#中文本框的值
获取C#中文本框的值
我正在开发一个WPF应用程序,我想获取文本框的值,我想使用KeyDown和KeyPress来检查文本是否为数字值,但是当我写KeyPress时,编译器会将属性下划线标出,所以我无法使用它。
private void sb_KeyDown_1(object sender, System.Windows.Input.KeyEventArgs e) { nonNumberEntered = false; // 判断按键是否为键盘上方的数字键。 if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) { // 判断按键是否为小键盘上的数字键。 if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9) { // 判断按键是否为退格键。 if (e.KeyCode != Keys.Back) { // 按下了非数字键。 // 将标志设置为true,并在KeyPress事件中进行评估。 nonNumberEntered = true; } } } // 如果按下了Shift键,则不是数字。 if (Control.ModifierKeys == Keys.Shift) { nonNumberEntered = true; } }
同时还将e.KeyCode和e.KeyNumPad0等标出。
我应该怎么办?
问题原因:该问题的出现是因为作者使用了错误的方法来获取文本框的值,并且没有正确设置数据绑定。
解决方法:要获取文本框的值,可以使用数据绑定来实现。首先,在视图模型上创建一个与文本框绑定的属性,然后在XAML中设置数据绑定。通过设置UpdateSourceTrigger属性,可以在每次字符更改时更新绑定的值。此外,如果需要进行验证,可以参考MSDN上关于WPF验证的文章,并查看StackOverflow上的相关问题。
以下是解决该问题所需的代码示例:
public class MyViewModel : INotifyPropertyChanged { private String myTextValue; public String MyTextValue { get { return myTextValue; } set { myTextValue = value; OnPropertyChanged("MyTextValue"); } } // INotifyPropertyChanged implementation goes here } public partial class MainWindow { public MainWindow() { InitializeComponent(); DataContext = new MyViewModel(); } }
这段代码定义了一个名为`MyViewModel`的视图模型类,其中包含一个名为`MyTextValue`的字符串属性。在MainWindow的构造函数中,将DataContext设置为一个新的MyViewModel实例。
通过使用上述代码和XAML中提供的绑定,你可以轻松地获取文本框的值。无需使用按钮或其他方法,只需在视图模型中的属性中获取即可。
需要注意的是,在Windows 8应用程序中,需要将Mode属性设置为"TwoWay"才能实现自动更新。另外,如果需要进行验证,可能需要使用一些方法来验证输入的值,具体实现可以参考提供的链接。
通过正确设置数据绑定,你可以轻松地获取文本框的值,无需使用按钮或其他方法。通过使用视图模型类和数据绑定,你可以实现WPF开发的最佳实践。记住,WPF和WinForms是不同的,尝试以相同的方式处理问题可能会导致困难。