关于自定义绘制里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,这个事件估计不够用!