VB中如何将listview的表头文字置中显示?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB中如何将listview的表头文字置中显示?相关的知识,希望对你有一定的参考价值。

VB中如何将listview的表头文字置中显示?也就是ColumnHeaders字段文字.
还有如果想表身内容的也置中显示,如果操作.
这位大哥,如果我只要表头置中,而表身的内容不用,怎么做?因为在很多应该中都是是只要表头置中,而表身都是左对齐.

Private Sub Command1_Click()
Dim xx As ListItem
Set xx = ListView1.ListItems.Add(, , "123")
xx.SubItems(1) = "456"
xx.SubItems(2) = "789"
Set xx = Nothing
End Sub

Private Sub Form_Load()
ListView1.View = lvwReport
ListView1.ColumnHeaders.Clear
ListView1.ColumnHeaders.Add , , "第1列", 1000
ListView1.ColumnHeaders.Add , , "第2列", 1000
ListView1.ColumnHeaders.Add , , "第3列", 1000
ListView1.ColumnHeaders(2).Alignment = lvwColumnCenter
ListView1.ColumnHeaders(3).Alignment = lvwColumnCenter
End Sub

以上代码是使ListView1的第二列和第三列的表头和内容均置中显示。注意,第一列只能靠左显示,不能置中或靠右,这是控件本身规定的。
如果想表头置中,而表身的内容靠左,则该控件本身的功能是无法实现的,也许用API函数发送控件消息可以实现,不过这似乎有“高射炮打蚊子”之嫌了。
参考技术A Set Nodxx = TrV1.Nodes.Add(, , , 1)
Nodxx.Text = " 表头文字" '以空格使其居中,旁无办法。

如何确定 VB.NET ListView 是不是正在向用户显示垂直滚动条

【中文标题】如何确定 VB.NET ListView 是不是正在向用户显示垂直滚动条【英文标题】:How can I determine if a VB.NET ListView is displaying vertical scrollbar to user如何确定 VB.NET ListView 是否正在向用户显示垂直滚动条 【发布时间】:2014-08-21 01:51:18 【问题描述】:

我觉得这应该很简单,但我似乎不知道如何做到这一点。

我有一个列表视图控件,我希望能够确定是否向用户显示垂直滚动条。

我已经尝试了以下链接中的解决方案:

http://www.pcreview.co.uk/forums/detect-presence-listview-scrollbar-t1321101.html

http://support.microsoft.com/KB/299686

我没有运气。我正在使用 VB.NET

如果有人有任何想法,我将不胜感激。

【问题讨论】:

【参考方案1】:

这是 MSDN 答案的 NET 更新(如果你看的话,那是 VB6 相关的):

'Pinvokes - these are usually Shared methods in a 
' Win32NativeMethods class you accumulate 
Private Const GWL_STYLE As Integer = -16
Private Const WS_HSCROLL = &H100000
Private Const WS_VSCROLL = &H200000

<DllImport("user32.dll", SetLastError:=True)> _
private Shared Function GetWindowLong(ByVal hWnd As IntPtr, 
                       ByVal nIndex As Integer) As Integer
End Function

' sometimes you use wrappers since many, many, many things could call
' SendMessage and so that your code doesnt need to know all the MSG params
Friend Shared Function IsVScrollVisible(ByVal ctl As Control) As Boolean
    Dim wndStyle As Integer = GetWindowLong(ctl.Handle, GWL_STYLE)
    Return ((wndStyle And WS_VSCROLL) <> 0)

End Function

' to be complete:
Friend Shared Function IsHScrollVisible(ByVal ctl As Control) As Boolean
    Dim wndStyle As Integer = GetWindowLong(ctl.Handle, GWL_STYLE)
    Return ((wndStyle And WS_HSCROLL) <> 0)

End Function

在其他地方,订阅 ClientSizeChanged 事件:

Private VScrollVis As Boolean = False
Private Sub lv_ClientSizeChanged(sender As Object, e As EventArgs) 
               Handles myListView.ClientSizeChanged

    VScrollVis = IsVScrollVisible(Me)

    MyBase.OnClientSizeChanged(e)
End Sub

你没有表明你想对此做什么。您可以在 VScrollVis 更改时引发一个新事件,或者您可以编写代码来“修复”控件,如果 HScroll 出现仅仅是因为 VScroll 现在是可见的。


我只想调用一个函数并让它在滚动条可见时返回 true

' expose PInvoke if needed, convert to non-Shared
Public Function IsVerticalScrollVisible(ctl As Control)
   Return IsVScrollVisible(ctl)
End Function

Public Function IsHorizontalScrollVisible(ctl As Control)
   Return IsHScrollVisible(ctl)
End Function

【讨论】:

我只是希望能够调用一个函数,如果滚动条可见则返回 true,否则返回 false。 然后创建一个从IsVScrollVisible返回值的函数 我就是这么做的。非常感谢你。【参考方案2】:

试试这个代码,所有的.net,只有一个 1 行函数。

Private Function IsVerticalScrollVisible(ByVal lst As ListView) As Boolean
    If lst.Items.Count > 0 Then _
        If (lst.Items(0).Bounds.Top - lst.TopItem.Bounds.Top < 0) Or _
        (lst.Items(lst.Items.Count - 1).Bounds.Bottom > lst.ClientSize.Height) _
        Then Return True
End Function

【讨论】:

以上是关于VB中如何将listview的表头文字置中显示?的主要内容,如果未能解决你的问题,请参考以下文章

VB中如何在ListView中添加ImageList中的图像

VB 如何让ListView选中的内容显示在Textbox中

vb.net如何查询DataGridView中数据,然后把查询到的内容显示到listview中

vb listview控件问题

VB里如何改变命令按钮中文字的颜色?

VB中如何实现单击listview中的一行,让text显示该行某列的值!!