[英]selecting enum as SelectedItem in combobox
我在選擇winforms組合框中的適當項目時遇到了困難。 以前我在這里詳細描述過,但是我認為問題仍然沒有解決,因為我使用一種形式進行添加/編輯記錄。 所以我有表格加載
private void AddEditForm_Load(object sender, EventArgs e)
{
PopulateComboBoxLanguage();
}
private void PopulateComboBoxLanguage()
{
comboBoxLang.DataSource = Enum.GetValues(typeof(Book.EnumLang));
}
在執行編輯操作時,我想用現有數據填充表單,並按應有的方式填充所有內容,但組合框始終顯示EnumLang的第一項。 從第二個構造函數中,我在其中使用PopulateWithExisingData(book)
comboBoxLang.SelectedItem = book.Language;
但是即使在通過book.Language
設置為German SelectedItem
情況下,在調試模式下也始終為null。
ps我嘗試了comboBoxLang.SelectedItem = (book.EnumLang)book.Language;
也與SelectedValue相同,但保持不變。
我再一次猜想問題出在頁面加載時填充組合框,但我不知道是什么以及如何解決。
請詢問更多信息。
在加載事件的底部,填充控件后,執行
if (isEdit) { //Set your controls selected values from the object you are editing }
現在,對於新對象,只需創建表單並在其上調用Show或ShowDialog。 這將引發Load事件,並填充您的控件。
要進行編輯,請創建表單,調用Initialize,然后執行Show / ShowDialog。 由於您的Initialize方法設置為isEdit = true,因此將加載事件底部的if(isEdit)代碼塊,並且控件值將設置為與正在編輯的對象的屬性相等。
這是一些非常簡單的示例代碼:
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//This is simulating an add...First Language will be displayed on form2,
//which is English
Form2 form = new Form2();
form.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
//This is simulating an edit...this will display french
//(or whatever is passed in)
Form2 form = new Form2();
form.Initialize(Languages.French);
form.ShowDialog();
}
Languages editValue;
bool isEdit = false;
public Form2()
{
InitializeComponent();
}
public void Initialize(Languages var)
{
editValue = var;
isEdit = true;
}
private void Form2_Load(object sender, EventArgs e)
{
comboBox1.DataSource = Enum.GetValues(typeof(Languages));
if (isEdit)
{
comboBox1.SelectedItem = editValue;
}
}
public enum Languages
{
English = 0,
French = 1,
Spanish = 2,
German = 3
}
設置數據源時,將傳遞對象數組。 設置SelectedItem時,將傳遞一個枚舉值,因此它將再次裝箱到對象。 ComboBox使用IndexOf方法在DataSource值中搜索您的項目,該方法使用Object.Equals方法將這些值與新值進行比較。 並且由於它們是不同的對象(引用不同),因此在DataSource集合中永遠找不到您的項目,因此選擇不會更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.