日期:2014-05-20  浏览次数:21036 次

关于自定义绘制里ListBox的2个问题
我在做winForm   >   ListBox自定义的时候,使用
DrawMode   =   OwnerDrawVariable
用OnMeasureItem和OnMeasureItem绘图。

现在的问题是OnMeasureItem比较头痛,因为有2个问题没办法解决,看看各位有什么办法没有?还是我哪里做错了

1、OnMeasureItem只会在ListBox被创建的时候调用一次?我希望改变ListBox的大小的时候,里面的Item会随着大小的变化而自动调整高度。结果没有调用OnMeasureItem方法。是不是又是winForm的Bug?

2、OnMeasureItem中指定ItemWidth不可以超出ListBox的长度么?而且ListBox不会产生水平滚动条?这个比较麻烦,有什么好的办法可以让他才生水平滚动条的?


如果觉得分数不够,可以再加。

------解决方案--------------------
to 1、OnMeasureItem只会在ListBox被创建的时候调用一次?我希望改变ListBox的大小的时候,里面的Item会随着大小的变化而自动调整高度。结果没有调用OnMeasureItem方法。是不是又是winForm的Bug?

你可以在ListBox的OnSizeChanged事件中重新调用OnMeasureItem事件。

to 2、OnMeasureItem中指定ItemWidth不可以超出ListBox的长度么?而且ListBox不会产生水平滚动条?这个比较麻烦,有什么好的办法可以让他才生水平滚动条的?

我记得滚动条是随着Control的Item长宽而自动出现的,因此你可以把ItemWidth设得比较大,而进行重绘的时候,考虑的是真实数据的大小,因此ItemWidth并不起作用。
------解决方案--------------------
http://msdn2.microsoft.com/zh-cn/library/system.windows.forms.listbox.onmeasureitem(VS.80).aspx
http://msdn2.microsoft.com/zh-cn/library/system.windows.forms.listbox.measureitem(VS.80).aspx

你可以看看MSDN里面这一部分的资料.里面只说对ItemHeight有限制,ItemWidth是没有特别说明.
------解决方案--------------------
OnMeasureItem,这个事件估计不够用!