无法求解未设置为对象实例的引用

本文关键字:对象 实例 引用 设置 | 更新日期: 2023-09-27 18:26:27

我拼命想让我的代码工作。当每个ComboBox都选择了其值时,应将值相除,并将结果插入到TextBox中。

ComboBoxes --> KörpergrößeGewicht

TextBox --> BMI

我的代码:

private void Körpergröße_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
     int value1, value2;
     if (Körpergröße.SelectedItem.ToString() != "Bitte auswählen..." && Gewicht.SelectedItem.ToString() != "Bitte auswählen...")
     {
         string a = Körpergröße.SelectedItem.ToString();
         string b = Gewicht.SelectedItem.ToString();
         value1 = Int32.Parse(a);
         value2 = Int32.Parse(b);
         fillTextBox(value1, value2);
     }
}
private void fillTextBox(int value1, int value2)
{          
     double result = value1 / value2;
     BMI.Text = result.ToString();
}
private void Gewicht_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
     int value1, value2;
     if (Gewicht.SelectedItem.ToString() != "Bitte auswählen..." && Körpergröße.SelectedItem.ToString() != "Bitte auswählen...")
     {
          string a = Körpergröße.SelectedItem.ToString();
          string b = Gewicht.SelectedItem.ToString();
          value1 = Int32.Parse(a);
          value2 = Int32.Parse(b);
          fillTextBox(value1, value2);
     }
}

当我执行程序时,它总是在两者的if部分给我例外。

我将其与Bitte auswählen...进行比较,以确保它不是在CombobBox中选择的,而是一个值。

Gewicht-ComboBox

<ComboBox Margin="205,77,0,0" Name="Gewicht" HorizontalAlignment="Left"  
     VerticalAlignment="Top" Width="123" Height="23"
     SelectionChanged="Gewicht_SelectionChanged">                       
    <ComboBoxItem Content="Bitte auswählen..." IsSelected="True" ></ComboBoxItem>
    <ComboBoxItem Content="40"></ComboBoxItem>
    <ComboBoxItem Content="41"></ComboBoxItem>
    <ComboBoxItem Content="42"></ComboBoxItem>
</ComboBox>

Körpergröße-ComboBox

<ComboBox Margin="205,50,0,0" Name="Körpergröße" HorizontalAlignment="Left"  
     VerticalAlignment="Top" Width="123" Height="23" SelectionChanged="Körpergröße_SelectionChanged" >
    <ComboBoxItem Content="Bitte auswählen..." IsSelected="True"  ></ComboBoxItem>
    <ComboBoxItem Content="150" ></ComboBoxItem>
    <ComboBoxItem Content="151"></ComboBoxItem>
    <ComboBoxItem Content="152"></ComboBoxItem>
</ComboBox>

无法求解未设置为对象实例的引用

您检查所选combobox项目的方式不正确。它应该是这样的:

if (((Gewicht.SelectedItem) as ComboBoxItem).Content.ToString() != "Bitte auswählen...")

此外,最好跳过第一项,然后选择选定的项目,如下所示:

if (Gewicht.SelectedIndex > 0 && Körpergröße.SelectedIndex > 0)
{
     string a = ((Körpergröße.SelectedItem) as ComboBoxItem).Content.ToString();
     string b = ((Gewicht.SelectedItem) as ComboBoxItem).Content.ToString();
}

在将其值解析为字符串之前,您应该检查以下内容

Körpergröße.SelectedItem.ToString()

Gewicht.SelectedItem.ToString()

如果两个值都不是 NULL,那么您可以将它们解析为 String((。

有可能

  • 当您选择">Körpergröße"时,检查Gewicht.SelectedItem.ToString(( != "Bitte auswählen...在您的 if 块中给出错误,因为仍未选择格威希特组合。
  • 当您选择">Gewicht"时,检查Körpergröße.SelectedItem.ToString(( != "Bitte auswählen...在您的 if 块中给出错误,因为仍未选择科尔珀格罗斯组合。

要解决此问题,请尝试在表单初始化时在组合框中设置默认值。

希望这有帮助...

在运行所有这些代码之前,您没有确保组合框所选索引不是 -1。

代码是相同的,所以像这样分解它:

private void CalculateValues()
{
        int value1, value2;
        if (Gewicht.SelectedItem.ToString() != "Bitte auswählen..." && Körpergröße.SelectedItem.ToString() != "Bitte auswählen...")
        {
            string a = Körpergröße.SelectedItem.ToString();
            string b = Gewicht.SelectedItem.ToString();
            value1 = Int32.Parse(a);
            value2 = Int32.Parse(b);
            fillTextBox(value1, value2);
        }
}

    private void Gewicht_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
if(Gewicht.SelectedIndex > -1 && Körpergröße.SelectedIndex > -1)
{
CalculateValues();
}
}
    private void Körpergröße_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
if(Körpergröße.SelectedIndex > -1 && Gewicht.SelectedIndex > -1 )
{
CalculateValues();
}
}

有一种更好的方法来编写该代码(例如,仅更新类级 int value1 或 value2,然后调用 CalculateValues((,但此处的代码应该可以工作。请注意,在"所选索引已更改"事件中,我正在检查以确保它是> - 1:选定索引> -1,因为在加载时它设置为 -1。并触发了更改事件..并且您在 -1 索引中没有任何内容。空引用。