Tại sao đặt SelectedValue
của một ComboBox
thành null
gây ra một ArgumentNullException
?Tại sao thiết lập ComboBox.SelectedValue thành null gây ra một ArgumentNullException?
Ngoại lệ chỉ xảy ra nếu ComboBox thực sự là một phần của Biểu mẫu. Tôi có thể đặt SelectedValue
cho tất cả các loại giá trị hoặc loại không hợp lý nhưng tôi không thể đặt thành null
.
Không phải là SelectedValue
không được là null
. Thực tế, giá trị của nó là lànull
tại thời điểm tôi đang cố gắng đặt giá trị đó thành null
.
Trong mã thực sự của tôi, điều này không xảy ra trong hàm khởi tạo và tôi không đặt thiết lập nó thành null
. Mã đang sử dụng biến số sẽ xảy ra là null
. Tôi có thể sửa lỗi bằng cách kiểm tra biến không phải là null
trước khi cố gắng đặt SelectedValue
. Nhưng điều tôi không hiểu là lý do tại sao Tôi không thể đặt giá trị đó thành giá trị null
.
Mã chỉnh sửa: DataSource bây giờ chứa một mục trong đó giá trị ValueMembers thực sự là 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; }
}
Bạn có mã được liên kết đến sự kiện SelectedIndexChanged hoặc một số sự kiện khác được kích hoạt bởi thay đổi giá trị hiện tại không? – Steve
Xem câu hỏi này có thể giúp ích không. http://stackoverflow.com/questions/2864065/c-sharp-set-combo-item-with-selectedvalue/2864119 –
@Steve: Không. Mã mẫu ở trên là một ví dụ làm việc hoàn chỉnh cho thấy ngoại lệ. – comecme