从 TextBox 访问值

Access value from 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 中的值,我缺少什么?

我不确定为什么你有第二个文本框,而第一个文本框的高度为 0。你输入的第二个文本框与第一个不一样。

至于第二部分,由于您在 XAML 中创建了一个名为的文本框,因此您可以直接在编译器中通过引用访问其值,XAML 被编译为 C# 并且编译器可以识别这一点。

我也不确定为什么要在发生故障时将 -9 作为整数值,请考虑以其他方式控制代码,可能使用可为空的 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 中属性 window 中的闪电符号,然后在 PreviewTextInput 中输入方法名称或修改提交按钮上的单击事件对于表单输入?然后您可以使用正则表达式来测试输入以查看它们是否匹配,如果匹配您可以继续,如果不匹配则创建错误消息并且不要继续输入过程,从而允许用户改变他们的行为。

编辑 1:此外,尽管我在这里没有使用任何名称,但使用比输入、结果、inputPax 等更具描述性的名称可能是个好主意。现在显示器上有很多视觉空间因此,使用更具描述性的名称和放弃首字母缩略词可以帮助提高代码的易读性。