日期:2014-05-18  浏览次数:21136 次

C#listBox使用DrawItem来绘制Item,出不了水平滚动条
C#listBox使用DrawItem来绘制Item,就算显示的内容(图片和字符串)都显示不下了,就出不了水平滚动条,哪位帮忙看一下:
this.listBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
 private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
  ……
}
 private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
{
  e.ItemHeight = 20;
  e.ItemWidth = 600;不知道为什么这个属性就是不起作用
}

------解决方案--------------------
在 .NET 2.0 里不行……,还是只显示垂直滚动条,因为还有属性 HorizontalScrollbar 以及 HorizontalExtent。
发现将 HorizontalExtent 设置为比较大的取值以后(大于 ListBox.Width 就可以滚动了,但应该统计一下 ListBox 中最宽的 Item 的宽度)就可以了。
上述试验都在 VS 2005/.NET 2.0 下进行。
------解决方案--------------------
在你的类里添加类似如下的一个方法:
C# code

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);

public void UpdateHScrllBar()
{
    SendMessage(this.Handle, 0x194, maxLength, 0);
}