获取c#上文本框的值

本文关键字:文本 获取 | 更新日期: 2023-09-27 17:58:55

我正在开发一个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 evaluate in KeyPress event.
                    nonNumberEntered = true;
                }
            }
        }
        //If shift key was pressed, it's not a number.
        if (Control.ModifierKeys == Keys.Shift)
        {
            nonNumberEntered = true;
        }

    }

并在e.KeyCode和e.KeyNumPad0…下加下划线。。。。我该怎么办?

获取c#上文本框的值

这不是在WPF中处理此问题的正确方法。

获取值很简单,你只需绑定到你的视图模型上的东西:

<TextBox Text="{Binding Path=MyTextValue}"/>

要使其在每次字符更改时更新,请设置UpdateSourceTrigger:

<TextBox Text="{Binding Path=MyTextValue, UpdateSourceTrigger=OnPropertyChanged}"/>

由于看起来您正在进行验证,我建议您查看MSDN上关于WPF中验证的文章:绑定验证

除非你在写游戏或类似的东西,否则你(几乎)永远不应该在WPF中捕捉实际的按键。

这里有一个关于StackOverflow的问题,它也可能有所帮助:WPF TextBox Validation C#

由于您显然还没有为MVVM设置,下面是您需要的一些代码:

public class MyViewModel : INotifyPropertyChanged
{
   //Standard INotifyPropertyChanged implementation, pick your favorite
   private String myTextValue;
   public String MyTextValue
   {
      get { return myTextValue; }
      set
      {
          myTextValue = vaule;
          OnPropertyChanged("MyTextValue");
      }
}

然后在你的代码后面:

public partial class MainWindow
{
    public MainWindow()
    {
         InitializeComponent();
         DataContext = new MyViewModel();
    }
}

这应该足以让您开始(以及XAML)。如果你有任何问题,请告诉我!

TwoWay模式下,在UpdateSourceTrigger设置为PropertyChanged的情况下,将TextBoxText属性绑定到视图(包含TextBoxUserControlWindow)的DataContext(通常是ViewModel)中支持更改通知的public string属性。

一旦这样做,您就可以在每次TextBox文本更改时(每次按键时)调用ViewModel中的方法,并在那里进行TextBox值验证。