我在我的C#WPF项目上有一个文本框,我希望它在我按Enter时将输入的值发送到文本框中,以将其发送到一个变量中。
我的用户输入文本框必须在单独的函数中,还是可以将其放在我想要将值发送到的相同函数中?
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.");
}
}
XAML代码
<TextBox Name="TextBoxX" TextWrapping="Wrap" MaxLength="32" KeyDown="UserInput" />
更新:我有一个奇怪的问题是,当我尝试输入任何内容(在调试时)时,它会阻止我输入任何内容。运行该代码并尝试再次输入后,它允许我输入一个字符(如一个数字),然后阻止我输入更多。
似乎也仅显示在代码运行后在文本框中键入的新字符。
我如何修复我的代码以运行我想要的方式,即输入值,按Enter,值发送到函数,将其设置为double变量:inputasnumberx ???
更新2:我已经更新了我正在使用的代码。我正在尝试获得两个输入,因此我设置了两个文本框。两者都应该做与我上面问的相同的事情。
您已经将用户input函数设置为文本框上KeyDown
EventHandler的处理程序。这意味着,每次您按使用文本框的键时,都会调用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" />