无法求解未设置为对象实例的引用
本文关键字:对象 实例 引用 设置 | 更新日期: 2023-09-27 18:26:27
我拼命想让我的代码工作。当每个ComboBox
都选择了其值时,应将值相除,并将结果插入到TextBox
中。
ComboBoxes
--> Körpergröße
, Gewicht
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 索引中没有任何内容。空引用。