gpt4 book ai didi

c# - 自定义列表框 : Elegant & effective implementation?

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

全部,

我目前正在对 ListBox 进行一些自定义,以提高我的应用程序的清晰度。基本上,很容易找到为此目的的“操作方法”,从而导致下面我当前的结果。

Current display

我对显示很满意,但是......我遇到了鼠标滚轮的奇怪行为。我试图查找有关此问题的信息,并找到了这篇文章:

http://aviationxchange.net/wikis/winforms/net-color-listbox.aspx

指出鼠标滚轮问题不是唯一的(从链接简单复制/粘贴)

  • 水平滚动条消失了。只有固定长度的字符串更小比控制宽度可以显示。如果控制怎么办调整大小?
  • 如果您尝试使用鼠标车轮,您可能已经注意到所选项目上下移动不规律地当滚轮是感动。
  • 可覆盖的方法OnPaint() OnPaintBackGround() 不工作。只是他们不是迷上了事件。背景是仅通过 Windows 消息绘制。

它提供了一些纠正这些问题的建议,但我对实现所有这些用于显示自定义列表的“解决方法”感到非常沮丧。我想念什么吗?是否有任何 winform 控件允许我以更干净/优雅的方式进行相同类型的自定义?我找不到更多信息:/

下面,添加了自定义绘图部分的相关部分,但我不确定显示问题是否真的基于重写方法的实现,更多的是控件本身。

    public RecordListBox(): base()
{
mListBox = this;

mListBox.DrawItem += new DrawItemEventHandler(mListBox_DrawItem);
mListBox.MeasureItem += new MeasureItemEventHandler(mListBox_MeasureItem);
this.DrawMode = DrawMode.OwnerDrawFixed;

}

public void mListBox_DrawItem(object sender, DrawItemEventArgs e)
{
if (this.DesignMode) return;

e.DrawBackground();
e.DrawFocusRectangle();

// drawing actions

}

public void mListBox_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = 40;
}

问候,

最佳答案

根据给定的链接,您必须重写 void WndProc(ref Message m) 才能解决鼠标滚轮问题。如果您要基于现有窗口对象(甚至是 UserControl)滚动您自己的自定义控件,您将重写许多方法和属性以使控件确实如您所愿。给出的链接看起来是一个好的开始。实现这些函数以及 MeasureItem 的覆盖,然后查看最终结果。但是,如果您想创建一个自定义控件,则大多只是反复试验,并需要进行大量研究。

关于c# - 自定义列表框 : Elegant & effective implementation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2292586/

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