Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 是否可以在listview中单独禁用水平滚动?_Vb.net_Listview_Scroll - Fatal编程技术网

Vb.net 是否可以在listview中单独禁用水平滚动?

Vb.net 是否可以在listview中单独禁用水平滚动?,vb.net,listview,scroll,Vb.net,Listview,Scroll,基本上,我只是想知道是否可以禁用水平滚动,同时在VB.NET中使用listview启用垂直滚动,而不必为其创建新类 为什么??好的,纯粹是美学上的,我的listview现在有一个小小的水平滚动,这不值得为它创建一个新类,尽管如果它可以不用太多努力就编码,我非常愿意这样做 PS:我在Windows窗体中工作我经常在“详细信息”视图中使用单栏的ListView控件,以提供列表的拖放功能,而ListBox控件中缺少这种功能。ListView除了想要水平滚动的恼人习惯外,还可以很好地实现这一点。通过将列

基本上,我只是想知道是否可以禁用水平滚动,同时在VB.NET中使用listview启用垂直滚动,而不必为其创建新类

为什么??好的,纯粹是美学上的,我的listview现在有一个小小的水平滚动,这不值得为它创建一个新类,尽管如果它可以不用太多努力就编码,我非常愿意这样做


PS:我在Windows窗体中工作

我经常在“详细信息”视图中使用单栏的ListView控件,以提供列表的拖放功能,而ListBox控件中缺少这种功能。ListView除了想要水平滚动的恼人习惯外,还可以很好地实现这一点。通过将列宽设置为合适的值(通常比ListView的宽度小4),可以在一定程度上解决这个问题,但如果外观发生变化,则渲染效果不会很好,如果控件决定在运行时添加垂直滚动条,则会完全失败

我使用的变通方法(我承认它不能应对所有情况)是这样的。首先,使用单个列(名称任意)配置ListView并隐藏其标题:

lvList.View = View.Details
lvList.FullRowSelect = True
lvList.Columns.Add("ColName")
lvList.Columns(0).Width = lvList.ClientSize.Width
lvList.HeaderStyle = ColumnHeaderStyle.None
然后处理ListView的ClientSizeChanged事件,并使用它将列的宽度设置为客户端区域的宽度(实际上是列表主体必须填充的区域):


随着列表内容的更改和垂直滚动条的添加或删除,将触发ClientSizeChange事件,并调整列的宽度,使其完全填充客户端区域。

我经常在“详细信息”视图中使用单个列的ListView控件,以提供具有拖放功能的列表,这是ListBox控件中缺少的。ListView除了想要水平滚动的恼人习惯外,还可以很好地实现这一点。通过将列宽设置为合适的值(通常比ListView的宽度小4),可以在一定程度上解决这个问题,但如果外观发生变化,则渲染效果不会很好,如果控件决定在运行时添加垂直滚动条,则会完全失败

我使用的变通方法(我承认它不能应对所有情况)是这样的。首先,使用单个列(名称任意)配置ListView并隐藏其标题:

lvList.View = View.Details
lvList.FullRowSelect = True
lvList.Columns.Add("ColName")
lvList.Columns(0).Width = lvList.ClientSize.Width
lvList.HeaderStyle = ColumnHeaderStyle.None
然后处理ListView的ClientSizeChanged事件,并使用它将列的宽度设置为客户端区域的宽度(实际上是列表主体必须填充的区域):


随着列表内容的更改和垂直滚动条的添加或删除,将触发ClientSizeChange事件并调整列的宽度,使其完全填充客户端区域。

不,这并不简单,需要重写WndProc。切换到WPF或Silverlight以获得对UI的完全控制。感谢Hans Passant,我会@DonA,但我只是觉得使用普通的winforms而不是WPF更舒服,我不知道为什么,我只是这么做,我过去曾创建过一些WPF项目,但对我来说,这似乎是一个完全不同的环境我明白这是winforms的学习曲线,但最终的结果对我来说是值得的。不,这并不简单,需要覆盖WndProc。切换到WPF或Silverlight以获得对UI的完全控制。谢谢Hans Passant,我会@DonA,但我只是觉得使用普通winforms而不是WPF更舒服,我不知道为什么,我只是这么做,我过去不得不创建一些WPF项目,但对我来说,这似乎是一个完全不同的环境,我从Winforms那里得到了一个学习曲线,但最终的结果,对我来说,是值得的。