0

私はc#のwinform開発を行っています。

複数のタブページで構成されるタブコントロールがあります。一部のタブページは完全にユーザーコントロールで埋められており、一部はコンボボックス/テキストボックスだけで埋められています。

コンボボックスのデータソースを設定すると、正常にロードされました。しかし、タブ コントロール インスタンス全体をパラメーターとして別のフォームに渡すと、新しいフォームで、コンボ ボックスの選択がクリアされ、最初に選択された項目に設定されます。

奇妙なことに、ユーザーコントロールに配置されたコンボボックスの場合、選択が明確ではなく、新しいフォームで正しく表示されました。タブページに直接配置されたもののみが機能しません。

提案やヘルプをいただければ幸いです。

4

2 に答える 2

1

兄弟。罰金?コンボボックスの問題については、私も同じです。私はこの方法で解決します: 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"])));
}
于 2013-02-07T12:49:29.883 に答える
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);
}
于 2013-02-07T13:24:05.057 に答える