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

时间:2015-12-12 08:01:19

标签: c# wpf dynamic combobox

我正在拼命地让我的代码工作。当每个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 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 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>

4 个答案:

答案 0 :(得分:1)

检查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();
}

答案 1 :(得分:0)

在将其值解析为String

之前,应检查以下内容
Körpergröße.SelectedItem.ToString()

Gewicht.SelectedItem.ToString()

如果两个值都是非NULL,则可以解析它们ToString()..

答案 2 :(得分:0)

在运行所有代码之前,您不确定所选的组合框是否为-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(),但是这里的代码应该可以工作。请注意我选择的Index Index Changed事件检查以确保它是&gt; - 1:SelectedIndex&gt; -1,因为在加载时它被设置为-1。并且已经触发了更改事件..并且你在-1索引中没有任何内容.NULL REFERENCE。

答案 3 :(得分:0)

有可能

  • 当您选择“Körpergröße”时,请检查 你的if块中的 Gewicht.SelectedItem.ToString()!=“Bitteususwählen... 正在发出错误,因为 Gewicht 组合仍未被选中。
  • 当您选择“ Gewicht ”时,请检查 Körpergröße.SelectedItem.ToString()!=“Bitteususwählen...... 在您的if块中发出错误,因为Körpergröße组合仍未被选中。

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

希望这会有所帮助......