【问题标题】:How do I disable the first option in a ComboBox?如何禁用 ComboBox 中的第一个选项?
【发布时间】:2018-10-27 07:36:56
【问题描述】:

我已将comboboxDropDownStyle 属性设置为DropDownList,我正在尝试禁用下拉列表的第一个选项(只读),因为这应该类似于“选择一个选项”。

我该怎么做? HTML 中的等效代码应该是这样的:

<option selected disabled>Select an option</option>

This 只是我在 c# 中实际想要实现的 html 演示。

顺便说一句,我正在使用 visual C# Windows Forms App (.NET Framework)

【问题讨论】:

  • 你的意思是使用 Razor 语法?
  • 您能告诉我们您当前的组合框下拉列表代码吗?
  • 您使用的是哪个项目模板,Asp.NetAsp.Net MVC 或其他?
  • @ershoaib Windows 窗体应用程序(.NET 框架)
  • 您的目标是什么:Winforms、WPF、ASP..?您应该始终正确标记您的问题,以便人们可以在问题页面上看到它!

标签: c# .net winforms combobox


【解决方案1】:

这个呢:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    var yourFont = new Font("Microsoft Sans Serif", 9, FontStyle.Regular);

    if (e.Index == 0)
    {
        e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), yourFont, Brushes.LightGray, e.Bounds);
    }
    else
    {
        e.DrawBackground();
        e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), yourFont, Brushes.Black, e.Bounds);
        e.DrawFocusRectangle();
    }
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboBox1.SelectedIndex == 0)
        comboBox1.SelectedIndex = -1;
}

您还需要将comboBoxDrawMode 属性设置为OwnerDrawFixed

【讨论】:

  • 为了更灵活,可以保存一个 List,可能在标签中并像这样进行测试:var ok = (List&lt;int&gt;)comboBox1.Tag; int ix = comboBox1.SelectedIndex; if (ok.Contains(ix)) comboBox1.SelectedIndex = -1
  • 使notOk ;-) - 另外:除了清除选择之外,可能还需要恢复之前的有效选择。
  • 有更简单的方法吗?这让我看起来很困惑
  • @GragasIncoming 这是我所知道的最简单的方法。为什么会混淆?您只需将上面的代码复制并粘贴到您的ComboBoxDrawItem 事件中,并将comboBoxDrawMode 属性设置为OwnerDrawFixed
  • 所以我双击表单(在设计模式下)并添加此代码?
猜你喜欢
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
相关资源
最近更新 更多