2012-07-24 73 views
0

我在做c#winform开发。在选项卡控件中清除组合框选择

我有一个tabcontrol由多个tabpages组成。一些tabpages充满了usercontrol,一些只是充满了combboxes/textboxes。

我为comboboxes设置数据源,它加载好。但是,当我将整个tabcontrol实例作为参数传递给另一个表单时,在新表单中,将清除组合框选择并将其设置为第一个选定项。

奇怪的是,对于放在用户控件中的组合框,选择不清晰,并且在新窗体中正确显示。只有那些直接放在标签页中才行。

任何建议或帮助将不胜感激。

+0

您是否正在寻找解决方案,以便您的ComboBoxes能够按照您的要求操作,或调查他们现在的行为背后的原因? – atiyar 2012-07-24 04:42:44

回答

0

如果正在寻找一种解决方案,以便您的ComboBoxes按照您的要求运行,请将您的ComboBoxes放在UserControl上,然后将UserControls放在TabPages上。这种方法已经行得通,对吗?

+0

是的,这是正确的。我已经通过将combbox放入用户控件来使其工作。但是,如果不这样做,我真的很感兴趣。干杯。 – 2012-07-24 11:36:29

0

bro。精细? 关于组合框问题,我也一样。 我解决了这种方式:不使用数据源

(有问题的)前:

comboBox.DisplayMember = "NmConta"; 
comboBox.ValueMember = "CodConta"; 
comboBox.DataSource = dataTable;    

后(没有问题):

comboBox.DisplayMember = "Value"; 
comboBox.ValueMember = "Key"; 
foreach (DataRow row in dataTable.Rows) 
{ 
    comboBox.Items.Add(new KeyValuePair<int, string>(Convert.ToInt32(row["CodConta"]), Convert.ToString(row["NmConta"]))); 
} 
0

上述方案实施后,我需要编写这种读写方法comboBox.SelectedValue:

// Set ComboBox.SelectedValue 
private void ComboBoxSelectedValue(ComboBox comboBox, object valueToSelect) 
{ 
    for (int i = 0; i < comboBox.Items.Count; i++) 
    { 
     object item = comboBox.Items[i]; 
     object value = item.GetType().GetProperty("Key").GetValue(item, null); 
     if (Convert.ToString(value) == Convert.ToString(valueToSelect)) 
     { 
      comboBox.SelectedIndex = i; 
      return; 
     } 
    } 
    comboBox.SelectedIndex = -1; 
} 

// Get ComboBox.SelectedValue 
private object ComboBoxSelectedValue(ComboBox comboBox) 
{ 
    if (comboBox.SelectedIndex < 0) { return null; } 
    object item = comboBox.Items[comboBox.SelectedIndex]; 
    return item.GetType().GetProperty("Key").GetValue(item, null); 
} 

// Get ComboBox.SelectedText 
private object ComboBoxSelectedText(ComboBox comboBox) 
{ 
    if (comboBox.SelectedIndex < 0) { return null; } 
    object item = comboBox.Items[comboBox.SelectedIndex]; 
    return item.GetType().GetProperty("Value").GetValue(item, null); 
}