我有一个应用程序,允许用户在TextBox
中键入一个值,然后将其从第一个ComboBox
中的值转换为第二个ComboBox
中的值,然后显示结果是另一个TextBox
。
示例:
ComboBox
。TextBox
。ComboBox
。TextBox
中正确显示。ComboBox
以显示" Gon"。TextBox
中的值未更新,并显示旧值。 我该如何解决这个问题? 换句话说: 如何重置ComboBox以便它不记得之前设置的内容?
我已经搜了几个小时,但没有运气。但是,我确实弄清楚了为什么会发生这种情况以及如何解决它(尽管不是最佳解决方案)。看起来它已经为所选内容设置了值,然后在我的if else条件中选择第一个(参见下面的代码)。我要解决的问题是在DropDownOpened="ComboBox_DropDownOpened"
XAML中设置ComboBox
,并且在该方法中,每次{{1}都将ComboBox
中的所有值设置为false打开。但是,这不是最优的,因为ComboBox
中有很多项目。
我还尝试为ComboBox设置ComboBoxes
(重置它),但它不起作用。
[已解决]第二个问题:我们在做什么,有没有办法改善我的" myComboBox.SelectedItem = -1
"方法? (见下面的代码)因为最后它必须检查10 * 10项,导致100 if else语句!
编辑:我去了一个跑步,意识到我可以使用嵌套的if循环! (我现在感觉很愚蠢)..所以不要让它可能通过if语句performCalculation()
次(对于我的最坏情况,最多100次),它只会{{1}现在的时间(最坏情况下最多X * Y
次):))
第一个问题仍然没有答案!
以下是我的代码片段:
XAML:
X + Y
C#:
10 + 10
if语句的新代码:
<ComboBox x:Name="ComboBoxIn" DropDownOpened="ComboBoxIn_DropDownOpened"SelectionChanged="ComboBox_SelectionChanged" DropDownClosed="ComboBox_DropDownClosed" >
<ComboBoxItem x:Name="DegreeIn" Content="Degree"/>
<ComboBoxItem x:Name="RadianIn" Content="Radian"/>
<ComboBoxItem x:Name="GonIn" Content="Gon"/>
<ComboBoxItem x:Name="MilIn" Content="Mil"/>
<ComboBoxItem x:Name="MinutesIn" Content="Minutes"/>
<ComboBoxItem x:Name="OctantIn" Content="Octant"/>
<ComboBoxItem x:Name="QuadrantIn" Content="Quadrant"/>
<ComboBoxItem x:Name="RevolutionIn" Content="Revolution"/>
<ComboBoxItem x:Name="SecondsIn" Content="Seconds"/>
<ComboBoxItem x:Name="SextantIn" Content="Sextant"/>
</ComboBox>
所有的angle.DegreeToRadian等方法只计算OutputValueTextBox中显示的内容。
示例:
private void ComboBoxIn_DropDownOpened(object sender, object e)
{
DegreeIn.IsSelected = false;
RadianIn.IsSelected = false;
GonIn.IsSelected = false;
// Not very optimal. I have one for each item in the ComboBox(and there are two ComboBoxes)
}
private void ComboBox_DropDownClosed(object sender, object e)
{
performCalculation();
}
private void performCalculation()
{
// This poor writing have been fixed. I'll leave it like this and post my new code below
// if anyone else want to have a look at it.
if (DegreeIn.IsSelected && RadianOut.IsSelected)
{
angle.DegreeToRadian(InputValueTextBox.Text);
}
else if (DegreeIn.IsSelected && DegreeOut.IsSelected)
{
angle.DegreeToDegree(InputValueTextBox.Text);
}
else if (DegreeIn.IsSelected && GonOut.IsSelected)
{
angle.DegreeToGon(InputValueTextBox.Text);
}
else if (RadianIn.IsSelected && DegreeOut.IsSelected)
{
angle.RadianToDegree(InputValueTextBox.Text);
}
OutputValueTextBox.Text = angle.TotalValue;
}
谢谢!