我之情況是這樣的:如何在Combobox綁定到數據時更改Combobox.Text屬性?
在運行時,我結合ToolStripComboBox控件到結構的陣列:
cbxTimes.ComboBox.DataSource = PlayTimeLengths;
cbxTimes.ComboBox.DisplayMember = "Description";
cbxTimes.ComboBox.ValueMember = "Minutes";
的ToolStripCombobox
的DropDownStyle
設置爲DropDown
。
一切工作正常,我可以從下拉列表中選擇值,我可以在控件中寫入文本。
但是我想阻止用戶按下某些控件,並在按下某些其他控件時替換Text屬性。
我想在KeyPress
事件來實現:
private void cbxTimes_KeyPress(object sender, KeyPressEventArgs e)
{
var cbxSender = ((ToolStripComboBox)sender).ComboBox;
string S = cbxSender.Text;
//some operations on the S variable
cbxSender.Text = S;
e.Handled = true;
} // breakpoint here shows that cbxSender.Text is not changed to S!
所以Text屬性並未改變,但我沒有得到任何的異常。 但是,如果我進一步運行程序(我退出了調試),我發現Text屬性已更改 - 更具體。我從控制中看到來自S的文本。現在
,想象,我按第二次任意鍵,我再次在調試器在相同的事件:
private void cbxTimes_KeyPress(object sender, KeyPressEventArgs e)
{
var cbxSender = ((ToolStripComboBox)sender).ComboBox;
string S = cbxSender.Text; // this time breakpoint is here
//some operations on the S variable
cbxSender.Text = S;
e.Handled = true;
} // breakpoint here shows that cbxSender.Text is not changed to S!
但是這一次我把斷點在第二行和檢查後,文本屬性我看到它仍然沒有改變。儘管事件發生後第一次我改變了它,並且控件中可以看到更改後的文本。但是在調試器中,我看到了不同的價值,我看到了開始時已經設置的價值。屬於結構數組的值。
那麼我能做些什麼來克服這個問題呢?
感謝您的回答。假設我將使用字符串填充Items []集合,有沒有什麼方法可以爲特定的字符串設置值?要有名稱 - 值對?或者,我必須獲取CurrentIndex並搜索陣列中的值:Value = MyArray [CurrentIndex]。 – Wodzu 2010-07-11 15:37:50
那麼訣竅是顯示的文本是什麼.ToString()返回您使用的類。因此,只要您重寫ToString()來執行顯示,您實際上可以使用任何您喜歡的值作爲值。 – 2010-07-11 16:51:11