一個好的解決方案(一般來講 - 它可能不是在你的特殊情況下,最好的方法,但判斷,我們需要更多的信息)似乎像存儲對象我ComboBox而不是單純的字符串。這些對象應該提供ComboBox中可見的文本以及運行要調用的方法的方法。
在您的例子,它看起來像你總是調用一個OutPort
實例的SetOutputState
方法(假設這裏的類名),所以你的ComboBox項的對象看起來是這樣的:
public class ComboItem
{
public ComboItem(string displayName, OutPort outPort)
{
this.displayName = displayName;
this.outPort = outPort;
}
private readonly string displayName;
private readonly OutPort outPort;
public override string ToString()
{
return displayName;
}
public OutPort OutPort {
get {
return outPort;
}
}
}
注意ToString
方法的結果將是ComboBox中用戶可見的字符串。
你將不得不填補像這樣的組合框:如果你需要在你想要做什麼更多的變化
ComboItem selectedItem = cmb_Motor.SelectedItem as ComboItem;
if (selectedItem != null) {
selectedItem.OutPort.SetOutputState();
}
:
cmb_Motor.Items.Add(new ComboItem("OutPortA", NXT_Brick.OutPortA);
cmb_Motor.Items.Add(new ComboItem("OutPortB", NXT_Brick.OutPortB);
cmb_Motor.Items.Add(new ComboItem("OutPortC", NXT_Brick.OutPortC);
然後,您可以評估這樣選擇的項目所選項目,將動作也執行到ComboItem
類中:
public class ComboItem
{
public ComboItem(string displayName, OutPort outPort)
{
this.displayName = displayName;
this.outPort = outPort;
}
private readonly string displayName;
private readonly OutPort outPort;
protected OutPort OutPort {
get {
return outPort;
}
}
public override string ToString()
{
return displayName;
}
public virtual void DoWork()
{
outPort.SetOutputState();
}
}
OutPort
財產現在不再需要公開;您只需在選定的項目上撥打DoWork
即可。因此,評估代碼可以改成這樣:
ComboItem selectedItem = cmb_Motor.SelectedItem as ComboItem;
if (selectedItem != null) {
selectedItem.DoWork();
}
對於任何需要一個不同的動作,你現在可以得到從ComboItem
一個新類,覆蓋DoWork
方法做不同的事情。
謝謝,我的確在尋找與反思開始的事情,但我可能一直在朝着錯誤的方向前進。 – Crypic2009 2012-08-02 22:49:16