从TextBox访问值

时间:2019-03-08 19:11:55

标签: c# textbox

我有一个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读取值,我缺少什么?

1 个答案:

答案 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等更多的描述性名称也是个好主意。这些天在显示器上有很多视觉上的显示空间,因此更具描述性的名称和首字母缩写词可以帮助提高代码的可读性。