Ich habe eine Methode, die in allen Steuerelementen auf einem Registerblatt sucht und eins zurückgibt, eine Zeichenfolge (Controls.Find Methode) entspricht. Da ich sicher bin, dass nur ein Steuerelement gefunden wird und dass die Kontrolle eine Combo-Box ist, habe ich versucht, es zu wirken, aber es verhält sich komisch.Controls.Find-Methode gibt nichts zurück, wenn Cast als ComboBox []
Dieser Code korrekt ausgeführt:
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cb = sender as ComboBox;
String Name = cb.Name;
Name = Name.Replace("Rank", "Target");
Control[] ar = cb.Parent.Controls.Find(Name, false);
MessageBox.Show(ar.Length.ToString());
if (ar.Length > 1)
{
MessageBox.Show("More than one \"Target\" combo box has been found as the corresponding for the lastly modified \"Rank\" combo box.");
}
else
{
for (int i = cb.SelectedIndex; i < Ranks.Count - 1; i++)
{
//ar[0].Items.Add(Ranks[i]); - this does not work, since Controls don't have a definition for "Items"
}
}
}
dieses Controls.Find Methode der Code nichts zurückliefert:
private void Enchantments_ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cb = sender as ComboBox;
String Name = cb.Name;
Name = Name.Replace("Rank", "Target");
ComboBox[] ar = (ComboBox[])cb.Parent.Controls.Find(Name, false); //Also tried "as ComboBox, instead of "(ComboBox)" if it matters
MessageBox.Show(ar.Length.ToString()); //Raises an exception as arr[] is null
if (ar.Length > 1)
{
MessageBox.Show("More than one \"Target\" combo box has been found as the corresponding for the lastly modified \"Rank\" combo box.");
}
else
{
for (int i = cb.SelectedIndex; i < Ranks.Count - 1; i++)
{
ar[0].Items.Add(Ranks[i]);
}
}
}
Ich frage mich, warum es nichts gibt, wenn sie als ComboBox gegossen und wie kann ich lindern dieses Verhalten.
Vielen Dank! Also, mein Fehler war nicht zu wissen, dass Casting etwas als einen bestimmten Typ nicht mehr weiß, welchen Typ eine Methode zurückgeben würde? – mathgenius
Wenn Sie versuchen, 'SomeValue as SomeType' zu erzeugen, ist der Cast nur dann erfolgreich, wenn der' SomeValue' wirklich vom Typ 'SomeType' ist. Dein Tipp ist hier, du hast erwartet, dass der Cast 'Control []' in 'ComboBox []' konvertieren kann. Ein Steuerelementarray, das eine Combobox enthält, ist nicht vom Typ von 'ComboBox []'. Wenn Sie wissen, dass alle Elemente vom Typ 'ComboBox' sind, können Sie' Cast() 'verwenden, wenn Elemente auch andere Steuerelemente enthalten können. Sie können das Ergebnis nur auf Kombinationsfelder beschränken , mit 'OfType ()'. –