在Winforms中禁用ListView中的Horizo​​ntal ScrollBar

时间:2014-04-30 11:59:41

标签: c# winforms listview scrollable

在我的应用程序中,我使用大量的ListView用于许多目的。我想禁用Horizo​​ntal ScrollBar。我使用以下链接作为参考有效地完成了 Disable Horizontal ScrollBar 1Disable Horizontal ScrollBar 2。以下是我的代码:

首先,我将ListView的Scrollable属性设置为false

[DllImport("user32.dll")]
static public extern bool ShowScrollBar(System.IntPtr hWnd, int wBar, bool bShow);
private const uint SB_HORZ = 0; //Horrizontal Scroll
private const uint SB_VERT = 1; //Vertical Scroll
private const uint ESB_DISABLE_BOTH = 0x3;
private const uint ESB_ENABLE_BOTH = 0x0;

创建一个方法,以便将它用于整个应用程序的所有ListView

public  void HideHorizontalScrollBar(ListView lv,int value, bool isNeeded)
{
    ShowScrollBar(lv.Handle, value, isNeeded);
}

现在在MainizeComponent()

之后的MainForm的Contructor中引用了这个方法
 private void ListViewHorrizontalScrollBar()
{
    //0 for horrizontal
    //1 for vertical

    _ListViewScrollOperation.HideHorizontalScrollBar(this.lvAntSetExcludedFiles, 0, false);
    _ListViewScrollOperation.HideHorizontalScrollBar(this.lvAntSetExcludedFiles, 1, true);
}

现在这件事对我很有用。但是我只是有一个小问题。即使只有2个值仍然可以看到Vertical ScrollBar。即使ListView中没有任何数据,Vertical ScrollBar仍然是可见的。

enter image description here

此外,由于ListView的Scrollable属性设置为false,因此无法使用键盘的向上和向下箭头键从上下或从下到上导航。 那么我还有什么办法可以解决这个问题吗?

任何帮助都会非常感激。

提前致谢

1 个答案:

答案 0 :(得分:-1)

经过大量的谷歌搜索和Sinatr的一点提示后,我终于找到了解决方案。当然,正如评论所说我在XY Problem。所以这就是我所做的。

  • 我首先将ListView的Scrollable属性更改为true。
  • 删除了我在上述问题中提到的代码块。

这是我在ListView

之后添加的额外代码行
lv.Items.Clear();
foreach (string newval in stringlist)
    lv.Items.Add(newval);
lv.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None);
lv.Columns[0].Width = 'Your own size';
lv.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);

我做了以下事情

  • 已禁用水平ScrollBar
  • 使用向上箭头导航
  • 垂直ScrollBar不会出现不必要的情况。