突出显示组合框中的特定项目

发布于 2024-07-19 02:04:52 字数 132 浏览 3 评论 0原文

我有一个场景,我用模板名称填充组合框。 在这些模板中,有一个是默认模板。 我想在填充组合框时突出显示默认模板名称(以便用户知道其中哪一项是默认的)。 可以这样做吗? 如果是的话怎么办? 我正在使用 C# 2.0 中的 Windows 窗体。

I have a scenario where I am populating a combo box with the template names. Amongst the templates one would be a default template. I want to highlight the default template name when I populate the combo box (so that the user knows which one among the items is the default). Is it possible to do so? If yes how? I am using a Windows Form in C# 2.0.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怀念你的温柔 2024-07-26 02:04:52

这在一定程度上取决于您想要如何突出显示该项目。 如果您想以粗体呈现默认项目的文本,您可以像这样实现(为此,您需要将 ComboBox 的 DrawMode 设置为 OwnerDrawFixed ,当然,将 DrawItem 事件连接到事件处理程序):

我已经用模板对象填充了组合框,定义如下:

private class Template
{
    public string Name { get; set; }
    public bool IsDefault { get; set; }

    public override string ToString()
    {
        return this.Name;
    }
}

...DrawItem 事件的实现如下:

private void ComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index < 0)
    {
        return;
    }
    Template template = comboBox1.Items[e.Index] as Template;
    if (template != null)
    {

        Font font = comboBox1.Font;
        Brush backgroundColor;
        Brush textColor;

        if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
        {
            backgroundColor = SystemBrushes.Highlight;
            textColor = SystemBrushes.HighlightText;
        }
        else
        {
            backgroundColor = SystemBrushes.Window;
            textColor = SystemBrushes.WindowText;
        }
        if (template.IsDefault)
        {
            font = new Font(font, FontStyle.Bold);
        }
        e.Graphics.FillRectangle(backgroundColor, e.Bounds);
        e.Graphics.DrawString(template.Name, font, textColor, e.Bounds);

    }
}

这应该让您朝着正确的方向前进,我希望。

It depends a bit on how you want to hightlight the item. If you want to render the text of the default item in bold, you can achieve that like this (for this to work you need to set the DrawMode of the ComboBox to OwnerDrawFixed, and of course hook up the DrawItem event to the event handler):

I have populated the combobox with Template objects, defined like this:

private class Template
{
    public string Name { get; set; }
    public bool IsDefault { get; set; }

    public override string ToString()
    {
        return this.Name;
    }
}

...and the DrawItem event is implemented like this:

private void ComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index < 0)
    {
        return;
    }
    Template template = comboBox1.Items[e.Index] as Template;
    if (template != null)
    {

        Font font = comboBox1.Font;
        Brush backgroundColor;
        Brush textColor;

        if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
        {
            backgroundColor = SystemBrushes.Highlight;
            textColor = SystemBrushes.HighlightText;
        }
        else
        {
            backgroundColor = SystemBrushes.Window;
            textColor = SystemBrushes.WindowText;
        }
        if (template.IsDefault)
        {
            font = new Font(font, FontStyle.Bold);
        }
        e.Graphics.FillRectangle(backgroundColor, e.Bounds);
        e.Graphics.DrawString(template.Name, font, textColor, e.Bounds);

    }
}

That should get you going in the right direction, I hope.

烦人精 2024-07-26 02:04:52

设置组合框的DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable。 和,
重写 Combobox_MeasureItem() 和 Combobox_DrawItem() 方法来实现此目的。

Set combo box's DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable. And,
Override Combobox_MeasureItem() and Combobox_DrawItem() methods, to achieve this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文