如何使用不同数组的组合框选定索引中的数组索引填充文本框

时间:2016-06-13 06:26:29

标签: c# arrays wpf combobox

我从文本文件创建了两个字符串数组,并用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();
}

3 个答案:

答案 0 :(得分:0)

如果您要比较文本字符串,那么您应该使用函数" .Equals"而不是 " =="

if(phoneComboBox.Text.Equals(cPhone[index]))
{
    nameTextBox.Text = cName[phoneComboBox.SelectedIndex];
}

答案 1 :(得分:0)

您无需检查条件,只需获取所选索引:

nameTextBox.Text = cName[phoneComboBox.SelectedIndex];

并在WPFSelectionChanged

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;
    }
}