Warum bewirkt das Setzen des SelectedValue
eines ComboBox
auf null
einen ArgumentNullException
?Warum verursacht das Setzen von ComboBox.SelectedValue auf null eine ArgumentNullException?
Die Ausnahme tritt nur auf, wenn die ComboBox tatsächlich Teil eines Formulars ist. Ich kann SelectedValue
auf alle Arten von Werten oder Typen einstellen, die keinen Sinn ergeben, aber ich kann es nicht auf null
setzen.
Es ist nicht so, dass SelectedValue
nicht null
sein kann. In der Tat ist sein Wert null
zu der Zeit, die ich versuche, es auf null
einzustellen.
In meinem echten Code passiert das nicht im Konstruktor, und ich setze es nicht explizit auf null
. Der Code verwendet eine Variable, die zufällig null
ist. Ich kann es beheben, indem Sie die Variable überprüfen, ist nicht null
vor dem Versuch, die SelectedValue
einzustellen. Aber was ich nicht verstehe ist warum Ich kann es nicht auf einen null
Wert setzen.
-Code bearbeiten: Datasource enthält nun einen Eintrag in dem der ValueMembers Wert ist es tatsächlich null
using System.Collections.Generic;
using System.Windows.Forms;
public class Form1 : Form {
public Form1() {
var comboBox1 = new ComboBox();
Controls.Add(comboBox1);
comboBox1.ValueMember = "Key";
comboBox1.DisplayMember = "Value";
comboBox1.DataSource = new List<Record> {
new Record {Key = "1", Value = "One"},
new Record {Key = null, Value = "null"}
};
comboBox1.SelectedItem = null; // no problem
comboBox1.SelectedValue = ""; // no problem
comboBox1.SelectedValue = new object(); // no problem
comboBox1.SelectedValue = null; // ArgumentNullException!!
}
}
public class Record {
public string Key { get; set; }
public string Value { get; set; }
}
Haben Sie Code verknüpft mit SelectedIndexChanged Ereignis oder ein anderes Ereignis ausgelöst durch die Änderung des aktuellen Wertes? – Steve
Sehen Sie, ob diese Frage helfen kann. http://stackoverflow.com/questions/2864065/c-sharp-set-combo-item-with-selectedvalue/2864119 –
@Steve: Nein. Der obige Beispielcode ist ein vollständiges funktionierendes Beispiel, das die Ausnahme zeigt. – comecme