gpt4 book ai didi

c# - 所有者绘制的列表框未绘制先前选择的项目

转载 作者:行者123 更新时间:2023-11-30 17:09:36 24 4
gpt4 key购买 nike

我想增加列表框中项目的高度 - 基本上是在内部填充它们。除此之外,我不想更改默认的列表框行为。我已经按照 MSDN 示例来执行所有者绘制的列表项,但我遇到了问题。默认的列表框用黑色绘制项目,用蓝色高亮显示白色的选定项目。为了实现相同的功能,我在 DrawItem 事件处理程序中使用了以下代码:

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
Brush b = (e.Index == ((ListBox)sender).SelectedIndex ? Brushes.White : Brushes.Black);
e.DrawBackground();
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, b, new Rectangle(new Point(e.Bounds.X, e.Bounds.Y + 2), e.Bounds.Size));
e.DrawFocusRectangle();
}

这似乎工作正常,除非我在列表周围单击。所选项目确实显示为蓝色背景上的白色文本,但之前选择的项目仍为白色。似乎我选择的项目被重新绘制,但之前选择的项目没有。如果我移动到另一个控件,列表框会重新绘制。我错过了什么?

最佳答案

要向列表框添加填充,只需将列表框的.ItemHeight 设置为某个高度即可。

否则,如果您想进行所有者绘制,请使用 e.ForeColor 而不是手动选择颜色。像这样:

Brush b = new SolidBrush(e.ForeColor);

请注意,在这种情况下,您还必须为所选项目绘制背景。检查列表框项目的状态可以像这样执行:

e.Graphics.FillRectangle((e.State & DrawItemState.Selected) != 0 ? SystemBrushes.Highlight : SystemBrushes.Window, new Rectangle(new Point(e.Bounds.X, e.Bounds.Y + 2), e.Bounds.Size));

关于c# - 所有者绘制的列表框未绘制先前选择的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12830790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com