0

我的 C# WPF 项目中有一个文本框,我希望它在按下回车后将输入到文本框中的值发送到以下函数中的变量。

我的文本框中的用户输入是否必须在一个单独的函数中,或者我可以将它放在我想要将值发送到的同一个函数中?

    private void UserInput(object sender, KeyEventArgs e)
    {
        Point p1 = new Point();
        TextBox textBoxX = new TextBox();
        if (e.Key == Key.Enter)
        {
            double inputAsNumberX = 0.0000;
            if (double.TryParse(textBoxX.Text, out inputAsNumberX))
            {
                p1.X = inputAsNumberX;
            }
            else
            {
                MessageBox.Show("This is not a number.");
            }

        }
        else
        {
        }

        double inputAsNumberY = 0;
        TextBox textBoxY = sender as TextBox;
        while (textBoxY.Text == null)
        {
            //textBoxY = sender as TextBox;
        }
        if (double.TryParse(textBoxY.Text, out inputAsNumberY) == true)
        {
            p1.X = inputAsNumberY;
        }
        else
        {
            MessageBox.Show("This is not a number.");
        }


    } 

xml代码

<TextBox Name="TextBoxX" TextWrapping="Wrap" MaxLength="32" KeyDown="UserInput" />

更新:我有一个奇怪的问题是,当我尝试输入任何内容(调试时)时,它会阻止我输入任何内容。运行完代码并尝试再次输入后,它允许我输入一个字符(如数字),然后阻止我输入更多。

它似乎也只显示代码运行后在文本框中键入的新字符。

我怎样才能修复我的代码以我想要的方式运行,即输入一个值,按回车键,值被发送到函数,它将它设置为双变量:inputAsNumberX???

更新 2:我已经更新了我正在使用的代码。我试图获得两个输入,所以我设置了两个文本框。两者都应该按照我上面的要求做同样的事情。

4

1 回答 1

0

据我了解,您已将 UserInput 函数设置为KeyDown文本框上事件处理程序的处理程序。这意味着每次您在选中文本框的情况下按下一个键,都会调用 UserInput 函数。如果您只想在按下“Enter”时解析文本框的内容,您可以将代码更改为以下内容:

private void UserInput(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        var textBox = sender as TextBox;
        if (textBox != null)
        {
            double inputAsNumberX = 0;

            if (double.TryParse(textBox.Text, out inputAsNumberX))
            {
                // Do something with inputAsNumberX here.
            }
            else
            {
                MessageBox.Show("This is not a number.");
            }
        }
    }
}

请注意,我首先检查是否按下了“Enter”。

更新:

我更改了上面的代码,以便它适用于任何UserInput用作事件的事件处理程序的文本框KeyDown。为您的两个文本框使用以下 XAML:

<TextBox Name="TextBoxX" TextWrapping="Wrap" MaxLength="32" KeyDown="UserInput" />
<TextBox Name="TextBoxY" TextWrapping="Wrap" MaxLength="32" KeyDown="UserInput" />
于 2012-12-21T10:14:35.900 回答