有没有办法只使
这是针对 C# WinForms(不是 WPF)的。
关于我尝试做什么的更多信息:
我有一个带有许多项目的
编辑:更多信息和之前的尝试
我已经子类化
我已尝试以下内容,成功的程度不同。变量
ListBox
中的单个项目失效?似乎没有获取项目矩形或特定项目是否可见的方法(除了在控件中每个像素/至少一个列中的每个像素调用 IndexFromPoint
)。这是针对 C# WinForms(不是 WPF)的。
关于我尝试做什么的更多信息:
我有一个带有许多项目的
ListBox
,我希望一组“按钮”出现在您悬停在其上的项目上(例如删除的红色 X)。我已经做得很好,但是对于具有10个或更多项目的列表,每次您悬停在新项目上时,它都会导致可见重绘,因为我使整个控件失效。数据未更改,仅更改显示。编辑:更多信息和之前的尝试
我已经子类化
ListBox
并在 OnDrawItem
中执行我的绘图,因此可以使用 ListBox
的受保护方法。我已尝试以下内容,成功的程度不同。变量
this
是扩展的 ListBox
,index
是要绘制的项,old_index
是先前正在绘制的项。// Causes flicker of entire list, but works
this.Invalidate();
// Causes flicker of selected item, but works
int sel_index = this.SelectedIndex;
this.SelectedIndex = old_index;
this.SelectedIndex = index;
this.SelectedIndex = sel_index;
// Does not work
if (old_index >= 0)
this.RefreshItem(old_index);
if (index >= 0)
this.RefreshItem(index);