我正在进行c#winform开发。
我有一个tabcontrol,包含几个tabpages。一些tabpages完全填充了usercontrol,有些只是填充了combboxes / textboxes。
我为组合框设置数据源并加载好了。但是,当我将整个tabcontrol实例作为参数传递给另一个表单时,在新表单中,组合框选择被清除并设置为选择的第一个项目。
奇怪的是,对于放在用户控件中的组合框,选项不清晰并在新表单中正确显示。只有直接放在标签页中的那些不起作用。
任何建议或帮助将不胜感激。
答案 0 :(得分:0)
如果正在寻找一个解决方案,以便您的ComboBoxes按照您的意愿运行,请将您的ComboBox放在UserControls上,然后将UserControls放在TabPages上。这种方法已经有效了,对吗?
答案 1 :(得分:0)
兄弟。精细? 关于组合框问题,我也一样。 我通过这种方式解决:不使用DataSource
之前(有问题):
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"])));
}
答案 2 :(得分: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);
}