【问题标题】:I can't get columns to hide in ObjectListView (FastListView)我无法让列隐藏在 ObjectListView (FastListView)
【发布时间】:2016-07-14 01:33:44
【问题描述】:

我喜欢 ObjectListView,但在右键菜单中显示列时遇到了麻烦。

当我通过 objectlistview.Columns.Add(olvcolumn) 方案添加列并设置 olvcolumn.IsVisible = False 时,它​​只是忽略它并显示列。

即使显示列,它们也不会显示在右键单击列标题菜单中。我可以看到每列的排序和分组,但看不到列。

当我尝试在运行时执行此操作并执行 objectlistview.RebuildColumns() 时,所有列都消失了。

我到底做错了什么?下面是初始化objectlistview的代码(我用的是fastlistview子类)

Me.lvSelectedFiles.HideSelection = False
Me.lvSelectedFiles.FullRowSelect = True
Me.lvSelectedFiles.GridLines = True
Me.lvSelectedFiles.Dock = System.Windows.Forms.DockStyle.Fill
Me.lvSelectedFiles.Location = New System.Drawing.Point(3, 3)
Me.lvSelectedFiles.Name = "lvSelectedFiles"
Me.lvSelectedFiles.Size = New System.Drawing.Size(937, 101)
Me.lvSelectedFiles.TabIndex = 8
Me.lvSelectedFiles.UseCompatibleStateImageBehavior = False
Me.lvSelectedFiles.View = System.Windows.Forms.View.Details
Me.lvSelectedFiles.ShowCommandMenuOnRightClick = True
Me.lvSelectedFiles.ShowFilterMenuOnRightClick = True
Me.lvSelectedFiles.UseAlternatingBackColors = True
Me.lvSelectedFiles.AlternateRowBackColor = SystemColors.Control
Me.lvSelectedFiles.SelectColumnsOnRightClick = True
Me.lvSelectedFiles.SelectColumnsOnRightClickBehaviour = BrightIdeasSoftware.ObjectListView.ColumnSelectBehaviour.Submenu

这是添加一列的逻辑(显示所有代码没有意义,因为我对每一列都做同样的事情)

olvcolhdr = New OLVColumn()
olvcolhdr.Text = "File Type"
olvcolhdr.Width = 150
olvcolhdr.DisplayIndex = 4
olvcolhdr.UseFiltering = True
olvcolhdr.Searchable = True
olvcolhdr.HeaderTextAlign = HorizontalAlignment.Left
olvcolhdr.TextAlign = HorizontalAlignment.Left
olvcolhdr.AspectGetter = Function(orow As Object)
                           Dim s As FoundFile = DirectCast(orow, FoundFile)
                           Dim sext As String = FileExtensionInfo(AssocStr.FriendlyDocName, s.Extension)
                           Return (sext)
                         End Function
lvSelectedFiles.Columns.Add(olvcolhdr)

olvcolhdr = New OLVColumn()
olvcolhdr.Text = "Size"
olvcolhdr.Width = 75
olvcolhdr.DisplayIndex = 5
olvcolhdr.UseFiltering = True
olvcolhdr.HeaderTextAlign = HorizontalAlignment.Left
olvcolhdr.TextAlign = HorizontalAlignment.Right
olvcolhdr.AspectName = "Length"
olvcolhdr.AspectToStringFormat = "{0:#,##0}"
olvcolhdr.Searchable = True
olvcolhdr.IsVisible = False
lvSelectedFiles.Columns.Add(olvcolhdr)

在上面的两列中,第一列应该是最初可见的,第二列是不可见的。但它们都显示为可见。我不是想将第一列设置为不可见。这总是可见的,没关系...

如果我执行上述操作,然后调用“RebuildColumns()”,所有列都会消失。

确认。请帮忙!

【问题讨论】:

  • 我应该明确显示所有列,即使其中一些列设置为 IsVisible = False。并且没有一列出现在右键菜单中。它们确实出现在列表视图中,除非我执行 RebuildColumns(),在这种情况下,一切都消失了。任何地方都没有错误消息。
  • 我还注意到在 objectlistview 论坛中提出了同样的问题(似乎不再受支持)。 2015年有人问过,一直没有回复。我敢肯定,可怜的菲利普试图支持这一点已经过度劳累了。这真的是一个很棒的列表视图。我只是遇到了一个奇怪的问题。
  • 有人吗?我知道我必须做一些明显的事情,但是我一直在搜索网络,并且看了一天多的演示,但仍然无法让列显示在右键菜单中。如果我生成和使用列属性,它们会显示出来,但由于各种原因,我不能使用生成范例。

标签: asp.net vb.net winforms objectlistview


【解决方案1】:

好吧,看来我是唯一一个回答我问题的人。对于将来遇到此问题的任何人,如果列未显示在上下文菜单中,那是因为您需要添加 OLVColumns TWICE!一次到列标题集合,另一次(我在将列添加到标题集合之前执行此操作,但可能没有区别)使用 objectlistview.AllColumns 函数。如:

objectlistview.AllColumns.Add(onewolvcolumn)

如果您不执行额外的分配(至少我在添加数据时使用 AddObject 函数),您将看到数据显示,但您不会在上下文菜单列表中看到任何列,并且如果您执行 RebuildColumns() 调用,它也会删除列表视图中的所有列。

所以,最终的代码看起来像这样(只是相关部分):

olvcolhdr = New OLVColumn()
olvcolhdr.Text = "Size"
olvcolhdr.Width = 75
olvcolhdr.DisplayIndex = 6
olvcolhdr.UseFiltering = True
olvcolhdr.Searchable = True
olvcolhdr.HeaderTextAlign = HorizontalAlignment.Left
olvcolhdr.TextAlign = HorizontalAlignment.Right
olvcolhdr.AspectName = "Length"
olvcolhdr.AspectToStringFormat = "{0:#,##0.0}"
lvFindInsideFiles.AllColumns.Add(olvcolhdr)
lvFindInsideFiles.Columns.Add(olvcolhdr)

olvcolhdr = New OLVColumn()
olvcolhdr.Text = "Message"
olvcolhdr.Width = 150
olvcolhdr.DisplayIndex = 7
olvcolhdr.UseFiltering = True
olvcolhdr.Searchable = True
olvcolhdr.HeaderTextAlign = HorizontalAlignment.Left
olvcolhdr.TextAlign = HorizontalAlignment.Left
olvcolhdr.AspectName = "ErrorMessage"
lvFindInsideFiles.AllColumns.Add(olvcolhdr)
lvFindInsideFiles.Columns.Add(olvcolhdr)

查看我两次添加 olvcolhdr(它是一个 OLVColumn 对象)的位置,一次使用 Columns 集合,另一次使用 AllColumns。我在文档中的任何地方或任何示例中都找不到这个,除了我没有看过的复杂示例,因为我有足够的问题需要担心 BASIC 示例!

【讨论】:

  • 谢谢!这让我很困惑。你的帖子有帮助:)
猜你喜欢
  • 1970-01-01
  • 2012-12-12
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
相关资源
最近更新 更多