我从文本文件创建了两个字符串数组,并用array1填充了一个组合框。我想了解的是,如何让文本框显示与组合框(array1)的选定索引匹配的array2的索引?
我认为这样的事情可能有用:
if(phoneComboBox.Text == cPhone[index])
{
nameTextBox.Text = cName[index]; //show equal index item to cPhone/phoneComboBox
}
但这似乎不起作用。我也试过一个foreach循环,也许我只是做错了。我在window_loaded事件中阅读了文本文件和数组,并且不知道这是否是问题所在。我已经看到SelectedIndexChanged事件在类似问题中提到了很多,但我没有使用该事件,只是SelectionChanged。
有人可以指出我在正确的轨道上吗?我知道数组可能不是最好用的,但它们是我用过的,所以请帮我理解它。
这就是我读取数组的方式:
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
//read file on start
int counter = 0;
string line;
StreamReader custSR = new StreamReader(cFileName);
line = custSR.ReadLine();
while (line != null)
{
Array.Resize(ref cPhone, cPhone.Length + 1);
cPhone[cPhone.Length - 1] = line;
counter++;
line = custSR.ReadLine();
Array.Resize(ref cName, cName.Length + 1);
cName[cName.Length - 1] = line;
counter++;
line = custSR.ReadLine();
phoneComboBox.Items.Add(cPhone[cPhone.Length - 1]);
}
custSR.Close();
/*string changeAll = string.Join(Environment.NewLine, cPhone);
string allOthers = string.Join(Environment.NewLine, cName);
MessageBox.Show(changeAll + allOthers);*/
//focus when program starts
phoneComboBox.Focus();
}
答案 0 :(得分:0)
如果您要比较文本字符串,那么您应该使用函数" .Equals"而不是 " =="
if(phoneComboBox.Text.Equals(cPhone[index]))
{
nameTextBox.Text = cName[phoneComboBox.SelectedIndex];
}
答案 1 :(得分:0)
您无需检查条件,只需获取所选索引:
nameTextBox.Text = cName[phoneComboBox.SelectedIndex];
并在WPF
中SelectionChanged
。
SelectedIndexChanged
适用于winform
。
最佳实践:
但我建议你使用Tag属性更好地实现这一目标。你不必为它改变很多代码。
//Create "ComboBoxItem" instead of "array"
while (line != null)
{
//initialize
ComboBoxItem cmItem = new ComboBoxItem();
//set Phone as Display Text
cmItem.Content = line; //it is the Display Text
//get Name
line = custSR.ReadLine();
//set Tag property
cmItem.Tag = line; //it is the attached data to the object
//add to "Items"
phoneComboBox.Items.Add(ComboBoxItem);
}
现在很容易在SelectionChanged
事件中获取所选项目:
void phoneComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
nameTextBox.Content = (e.AddedItems[0] as ComboBoxItem).Tag;
}
您不再需要处理这些数组了。
答案 2 :(得分:0)
感谢其他答案,这就是我提出的答案。修复了我得到的indexOutOfRange异常。
private void phoneComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (phoneComboBox.SelectedIndex != -1)
{
nameTextBox.Text = cName[phoneComboBox.SelectedIndex];
}
else
{
nameTextBox.Text = string.Empty;
}
}