我有一个TextBox
定义为:
<TextBox Name="input" HorizontalAlignment="Left" Height="0" Margin="155,110,-155,-110" TextWrapping="Wrap" VerticalAlignment="Top" Width="99"/>
<TextBox Height="25" Margin="126,85,-126,-110" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Left" Width="99"/>
我正在尝试访问TextBox
内部的值。我尝试用以下方法做到这一点:
int inputPax;
TextBox tb = (TextBox)this.FindName("input");
try
{
inputPax = int.Parse(tb.Text);
}
catch(System.FormatException)
{
inputPax = -9;
}
MessageBox.Show(inputPax.ToString());
无论输入什么,我总是看到该值为-9。为了正确地从TextBox
读取值,我缺少什么?
答案 0 :(得分:1)
我不确定为什么还有第二个文本框,而第一个文本框的高度为0。输入的第二个文本框与第一个文本框不同。
对于第二部分,由于您已经在XAML中创建了一个名为的文本框,因此可以直接在编译器中通过引用来访问其值,因此XAML被编译为C#,并且编译器可以识别出来。
我也不确定为什么要在发生故障时将-9用作整数值,请考虑以其他方式控制代码,可能使用可为null的int并进行检查或使用其他布尔值,如图所示下面?检查负数会限制您的选择,尤其是因为它是用户输入的内容,如果您期望-9稍后表示失败,则允许输入-9可能会导致错误。
简而言之。
<TextBox Name="input" HorizontalAlignment="Left" Height="25" Margin="155,110,-155,-110" TextWrapping="Wrap" VerticalAlignment="Top" Width="99"/>
int inputPax;
bool result = int.TryParse(input.Text, out inputPax);
if (result)
{
MessageBox.Show($"{inputPax}");
//Interpolated $"strings" can be more succint and easier to modify.
}
else
{
MessageBox.Show("Input has failed to parse, please enter a number.");
}
还可以考虑将事件添加到文本框(在IDE的属性窗口中单击闪电符号,然后在PreviewTextInput中键入方法名称,或修改表单输入的Submit按钮click事件吗?然后可以使用regex测试输入是否匹配以及是否匹配,您可以继续,如果不匹配,则创建错误消息并且不继续输入过程,从而允许用户更改其行为。
编辑1:同样,即使我在这里没有使用任何东西,使用比输入,结果,inputPax等更多的描述性名称也是个好主意。这些天在显示器上有很多视觉上的显示空间,因此更具描述性的名称和首字母缩写词可以帮助提高代码的可读性。