[英]How do I set the text value of a ComboBox to the output of a function in C#?
[英]How can I set ComboBox text to a value not in DataSource (C#)?
我在窗體上具有多個DropDown樣式的ComboBox,用戶可以在其中指定與值(例如,米,英尺等)關聯的單位。 為此,我在Settings.Settings中使用一個應用程序字符串集合,並將其與一些默認單位類型綁定到ComboBox的DataSource,如下所示:
this.cboUnit.DataSource =
(System.Collections.Specialized.StringCollection)Properties.Settings.Default.Units;
用戶能夠成功選擇一個單位或指定一個新單位。
現在,當我將this.cboUnit.Text
保存到某些XML配置文件中時,我能夠處理兩種情況。 打開XML配置文件並執行this.cboUnit.Text = "NonExistentUnit";
將失敗,並導致選擇集合中的第一項。
如何在不將項目添加到ComboBox或修改DataSource本身的情況下修改ComboBox以支持我要求的行為?
當combobox綁定到DataSource時,在Using ComboBox.Text中提出了一個解決方案,但我找不到支持此行為的官方文檔。 因此,我寧願避免這種情況。
我找不到將項目插入綁定的DataSource中的任何有效方法。 因此,我最終做了以下工作:
BindingSource bindingSource = new BindingSource((System.Collections.Specialized.StringCollection)Properties.Settings.Default.Units, "");
if(!bindingSource.Contains(someSavedValue))
{
bindingSource.Insert(0, someSavedValue));
}
this.cboUnit.DataSource = bindingSource;
這將創建綁定源的新實例,可以在將其綁定到數據源之前對其進行修改。 我將此代碼包裝在一個方法中,該方法可以傳遞一個字符串集合和一個存儲的值(在本例中為savedUnit
),該值返回一個新的BindingSource實例。 這對我來說特別有用,因為我現在可以簡單地寫:
this.cboLengthUnit.DataSource = CreateBindingSource(unitsCollection, savedLengthUnit);
this.cboWidthUnit.DataSource = CreateBindingSource(unitsCollection, savedWidthUnit);
this.cboHeightUnit.DataSource = CreateBindingSource(unitsCollection, savedHeightUnit);
我是從內存中編寫上述代碼的,因此可能包含錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.