组合框中的.NET隐形项目

时间:2010-04-01 11:29:52

标签: c# combobox

我正在将字符串加载到组合框 -

cboIndexLanguage.Items.Add("ThisLanguage")

我想让其中几件物品看不见。

5 个答案:

答案 0 :(得分:2)

我找到了解决方案。它可以通过绑定DataTable对象来完成:

            comboBox.DisplayMember = "VALUE";
            comboBox.ValueMember = "ID";

            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("VALUE");

            for (int i = 0; i < 5; i++)
            {
                DataRow row = dt.NewRow();
                row[0] = i;
                row[1] = "val"+i;
                dt.Rows.Add(row);
            }
            dt.AcceptChanges();

            comboBox.DataSource = dt;

然后只需找到要隐藏的项目并将其隐藏(通过设置为已删除):

dt.Select("ID = 2").First().Delete();

或取消隐藏全部:

dt.RejectChanges();

答案 1 :(得分:0)

尝试为每个项目发送CB_SETMINVISIBLE条消息。

OR

根本不设置Text值!

稍后编辑:

int invItems = 5;
Message msg = new Message();
msg.Msg = CB_SETMINVISIBLE;
msg.LParam = 0;
msg.WParam = invItems;
msg.HWnd = combo.Handle;
MessageWindow.SendMessage(ref msg);

或者调用它:

[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, long wParam, long lParam);

答案 2 :(得分:0)

您可以使用其他列表来保存字符串并通过组合框向用户显示所需的项目。为此,您可以定义一个Refresh_Combo_Method,它清除组合框项目并将项目从字符串列表复制到组合,然后索引在主要列表。

List<string> colorList = new List<string>();
colorList.Add ("Red");
colorList.Add ("Green");
colorList.Add ("Yellow");
colorList.Add ("Purple");
colorList.Add ("Orange");
...
colorList.Remove("Red");
colorList.Insert(2, "White");
colorList[colorList.IndexOf("Yellow")] = "Black";
colorList.Clear();


...

combobox.Items.Clear();

答案 3 :(得分:0)

以线程安全的方式,你可以非常简单地做到这一点(如果你只想玩颜色):

private delegate void SetBackColorDelegate(int index, Color color);
private void SetBackColor(int index, Color color)
    {
        if (cboIndexLanguage.InvokeRequired)
        {
            cboIndexLanguage.Invoke(new SetBackColorDelegate(SetBackColor), new object[] { index, color });
        }
        else
        {
            cboIndexLanguage.Items[index].BackColor = color;
        }
    }

换句话说,您只需从组合框中删除项目,但将它们保存在f.ex的某些数据结构中:

class ComboElement
{
     public String ComboElementText { get; set; }
     public int Index { get; set; }

    public ComboElement(String elementText, int index)
    {
       ComboElementText = elementText;
       Index = index;
    }
}

//* List of hidden elements.
List<ComboElement> hiddenElements = new List<ComboElement>();

然后你想再次展示它,你可以从这里拿走它,然后插入正确的位置(你知道索引)。

答案 4 :(得分:0)

将这些添加到你的组合框

class MyCboItem
{
    public bool Visible { get; set; }
    public string Value { get; set; }
    public override string ToString()
    {
        if (Visible) return Value;
        return string.Empty;
    }
}