如何隐藏组合框中的特定项目数。下面的代码将隐藏所有项目。我无法找到执行此操作的方法
string taskSelection = taskSelectionComboBox.Text;
string stateOfChild = stateOfChildComboBox.Text;
if (stateOfChild == "Awake")
{
taskSelectionComboBox.Hide();
}
答案 0 :(得分:4)
我建议您查看DrawItem
和MeasureItem
事件,然后在其中制作逻辑。
// this is crucial as it gives the the measurement and drawing capabilities
// to the item itself instead of a parent ( ComboBox )
taskSelectionComboBox.DrawMode = DrawMode.OwnerDrawVariable;
taskSelectionComboBox.DrawItem +=TaskSelectionDrawItem;
taskSelectionComboBox.MeasureItem += TaskSelectionMeasureItem;
然后在TaskSelectionMeasureItem
方法内部将高度设置为0
:
void TaskSelectionMeasureItem(object sender, MeasureItemEventArgs e)
{
if(/* check if you want to draw item positioned on index e.Index */
!CanDraw(e.Index) // or whatever else to determine
)
e.ItemHeight = 0;
}
之后在绘图方法(TaskSelectionDrawItem
)中,您可以再次检查并绘制或不绘制该特定元素:
void TaskSelectionDrawItem(object sender, DrawItemEventArgs e)
{
if(CanDraw(e.Index))
{
Brush foregroundBrush = Brushes.Black;
e.DrawBackground();
e.Graphics.DrawString(
taskSelectionComboBox.Items[e.Index].ToString(),
e.Font,
foregroundBrush,
e.Bounds,
StringFormat.GenericDefault
);
e.DrawFocusRectangle();
}
}
答案 1 :(得分:3)
另一种方法是使用DataSource
组合框
var originalTasks = new List<string>
{
"One",
"Two",
"Three",
"Awake"
};
taskSelectionComboBox.DataSource = originalTasks;
然后,您将通过仅为DataSource
重新分配您想要展示的项目来隐藏项目
taskSelectionComboBox.DataSource = originalTasks.Where(item => item != "Awake").ToList();
再次显示所有项目
taskSelectionComboBox.DataSource = originalTasks;
此方法适用于任何类型的项目。
答案 2 :(得分:2)
您需要存储所需的项目,然后使用remove方法删除它们。你可以使用add来恢复它们。
// keep the items in a list
List<string> list = new List<string>();
list.Add("Awake");
// remove them from combobox
comboBox1.Items.Remove("Awake");
// if you want to add them again.
comboBox1.Items.Add(list[0]);
答案 3 :(得分:1)
基于我同事 Mateusz 非常简洁的方法: 在comboBox 中显示的项目不需要是文本字符串,而是具有作为项目输出的ToString() 方法的任何对象。 我们可以在这样的对象中引入一个额外的 Hidden 属性。然后,在所描述的方法中,添加对该属性的识别,并很自然地消除该项目的显示。
替换
if (CanDraw(e.Index))
{
}
与
object item = combo.Items[e.Index];
var h = item.GetType().GetProperty("Hidden");
if (!(h == null) && h.GetValue(item).AsBool())
{
}