2016-06-13 3 views
0

Ich habe zwei String-Arrays aus einer Textdatei erstellt und eine Combobox mit Array1 gefüllt. Was ich gerne verstehen würde ist, wie bekomme ich eine Textbox, um den Index von Array2 anzuzeigen, der mit dem ausgewählten Index der Combobox (array1) übereinstimmt?So füllen Sie eine Textbox mit einem Array-Index aus dem Combobox ausgewählten Index eines anderen Arrays

Ich dachte, so etwas wie dies funktionieren kann:

if(phoneComboBox.Text == cPhone[index]) 
{ 
    nameTextBox.Text = cName[index]; //show equal index item to cPhone/phoneComboBox 
} 

Aber das scheint nicht zu funktionieren. Ich habe auch eine foreach-Schleife ausprobiert, vielleicht mache ich es einfach falsch. Ich habe die Textdatei und die Arrays im window_loaded-Ereignis gelesen und weiß nicht, ob das das Problem ist. Ich habe das SelectedIndexChanged-Ereignis in ähnlichen Fragen häufig erwähnt, aber ich habe dieses Ereignis nicht zu verwenden, nur SelectionChanged.

Kann mir bitte jemand den richtigen Weg zeigen? Ich weiß Arrays sind vielleicht nicht die beste Verwendung hier, aber sie sind, was ich verwendet habe, also bitte helfen Sie mir, es richtig zu verstehen. Diese

ist, wie ich die Arrays gelesen habe:

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

Zeigen Sie den Code, wie bevölkern Sie die Arrays? – Shaharyar

+0

@Shaharyar bearbeitet – Jaqtaris

Antwort

0

Danke für die anderen Antworten, das ist die Antwort, die ich gefunden habe, die funktioniert. Behebt die Exception indexOutOfRange, die ich bekommen habe.

private void phoneComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (phoneComboBox.SelectedIndex != -1) 
    { 
     nameTextBox.Text = cName[phoneComboBox.SelectedIndex]; 
    } 
    else 
    { 
     nameTextBox.Text = string.Empty; 
    } 
} 
0

In den, wenn Sie vergleichen Text-Strings, so sollten Sie die Funktion ".Equals" anstelle von
"=="

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

Immer noch ein leeres Textfeld und entfernt die() aus 'SelectedIndex' – Jaqtaris

+0

ging mit' if (phoneComboBox.Text! = -1) 'als das sortierte die outOfRange Ausnahme ich von der Antwort unten erhalten wurde. – Jaqtaris

0

Sie brauchen nicht um den Zustand zu überprüfen, damit die ausgewählten Index erhalten:

nameTextBox.Text = cName[phoneComboBox.SelectedIndex]; 

und in WPF haben Sie SelectionChanged.

SelectedIndexChanged ist für winform.

Best Practice:

Aber ich würde Sie einen besseren Weg vorschlagen, dies mit Tag Eigenschaft zu erreichen. Sie müssen nicht viel Code dafür ändern.

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

und nun seine ganz einfach das ausgewählte Element in SelectionChanged Ereignis erhalten:

void phoneComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    nameTextBox.Content = (e.AddedItems[0] as ComboBoxItem).Tag; 
} 

Sie nicht mehr diese Arrays behandeln müssen.

+0

Das funktionierte im 'SelectionChanged'-Ereignis, aber wenn ich versuche, eine andere Zahl als die Elemente in der Combobox einzugeben, erhalte ich eine indexOutOfRange-Ausnahme. Naja, ein weiteres Problem, um es herauszufinden. – Jaqtaris

+0

Ich habe einen besseren Weg geschrieben, um es zu erreichen, bitte implementieren Sie es werden Sie kein Problem mit diesem Ansatz haben. – Shaharyar

+0

Es muss Arrays sein, aber danke für die Tipps, ich habe einen Weg gefunden, es mit Hilfe von hier arbeiten zu lassen. – Jaqtaris