【问题标题】:Enable scroll bar from disabled listview in C#在 C# 中从禁用的列表视图启用滚动条
【发布时间】:2012-01-13 20:23:57
【问题描述】:

我越来越糊涂了。我准备好了:

this.listView1.Enabled = false;

当我这样做时,listview 的滚动条也被禁用。我想在禁用列表视图时查看带有滚动条的列表视图中的所有列表视图项。请给我一些建议。谢谢。

【问题讨论】:

  • 问题是:你为什么要禁用列表视图?您是否需要用户无法编辑项目?要不然是啥?据此,我们可以提供不同的解决方案...
  • 在 [this][1] 帖子中有几种方法可以实现这一目标。 [1]:stackoverflow.com/questions/529121/…
  • 抱歉@Marco,我不需要其他解决方案。我在 listview 上编写多线程,我想看到所有 listviewitem 的变化。 :)
  • 你设置Enabled = false的原因是什么?这对多线程没有帮助...
  • @JayP,我正在使用 Winform C#。你有不同的链接。谢谢。

标签: c# winforms listview scroll


【解决方案1】:

经过很多 cmets,我假设您的列表视图,因为经常从许多不同的线程更新,正在闪烁。
如果是这样,一种可能的解决方案是启用双缓冲;无论如何,这个属性是protected,所以只能从后代类访问。
所以你可以:

  1. 向您的项目添加一个新类并粘贴如下所示的代码
  2. 编译
  3. 将新控件从工具箱顶部拖放到表单上,替换旧控件

这可以解决你的问题。

using System;
using System.Windows.Forms;

class BufferedListView : ListView 
{
    public BufferedListView() 
    {
        this.DoubleBuffered = true;
    }
}

这个想法来自this post on SO。

【讨论】:

  • @Hùng Lê Xuân:我的回答对你有帮助吗?您是否设法解决了这个问题?
  • 像魅力一样工作。 :)) 谢谢@Marco。
【解决方案2】:

您不能滚动禁用的控件,因为滚动条是控件本身的一部分(而且它已被禁用,所以...)。

如果你想滚动但不允许用户选择任何东西,你可以这样做

this.listBox1.SelectionMode = SelectionMode.None;

如果您想还原它,您可以将其设置为 SelectionMode.One 用于单选,或将其设置为其他选项之一以允许多选。

另一个(恕我直言过于复杂)选项是制作用户绘制的 ListBox。

【讨论】:

  • ListView 没有 SelectionMode 属性。感谢@alex
【解决方案3】:

您不能滚动禁用的控件 - 但如果您确实需要这样的功能,请开发一个用户控件。

Developing Custom Controls in C#

Hiding the scroll bar in CheckListbox

Writing your custom control step by step.

【讨论】:

  • @HùngLêXuân 我已经用用户控件链接和隐藏滚动条编辑了我的答案。
【解决方案4】:

如果您将列表视图放在 Panel 中,您可以通过在 Panel 控件上设置 ScrollBars="Auto" 来启用滚动

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2015-02-23
    • 1970-01-01
    • 2015-02-21
    • 2014-04-16
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多