我喜欢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()',则所有列都会消失。
确认。请帮忙!
答案 0 :(得分: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示例!