如何在列表视图(Windows窗体C#)中创build一个平面的列标题button

怎样才能在C#中为listview的columnheader创build一个“FlatStyle”button? 我已经研究了这一点,我遇到了VB的代码: http : //www.freevbcode.com/ShowCode.asp? ID= 426

我不知道如何在C#中做到这一点,我也想知道是否有更好的方式来做到这一点。

谢谢!

该代码的历史可以追溯到Vista之前,不再使用新的Vista视觉风格的标题控件。 您还需要关闭视觉样式呈现。 现在也不能用于64位模式。 而另一个副作用是用户在悬停列标题时不再获得视觉反馈,这是关闭HDS_BUTTON样式标志的不可避免的副作用。

Anyhoo,这是代码,使标题看起来平坦。 为您的项目添加一个新类,并粘贴下面显示的代码。 编译。 将新的控件从工具箱的顶部放到表单上。

using System; using System.Windows.Forms; using System.Runtime.InteropServices; class FlatListView : ListView { public FlatListView() { this.HeaderStyle = ColumnHeaderStyle.Nonclickable; } protected override void OnHandleCreated(EventArgs e) { if (this.View == View.Details) { IntPtr hHeader = SendMessage(this.Handle, LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero); SetWindowTheme(hHeader, "", ""); } base.OnHandleCreated(e); } private const int LVM_GETHEADER = 0x1000 + 31; [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); [DllImport("uxtheme.dll")] private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist); } 

我不立即知道如何在Windows窗体中执行此操作的方法,但如果您的代码允许,则可以尝试创建WPF应用程序而不是Windows窗体。 它背后的代码仍然是C#,但它允许更多的增强图形更改。

Windows窗体有时会阻止某些视觉可能性。

问候,凯文

你可以这样做,但用户将无法点击标题。

如果您创建列表视图的列,则当用户显示详细视图时,列标题将显示并像常规按钮一样运行。 这也意味着用户可以点击一个列标题,你可以采取行动。 如果你不想要这个外观和这种行为 ,你可以使列显示为平坦的 。 这个特性是由ListView类的HeaderStyle属性控制的。 该属性基于ColumnHeaderStyle枚举器。 其成员是:

可点击:这是默认的样式。 列标题显示和行为像按钮:

 listView1.HeaderStyle = ColumnHeaderStyle.Clickable; 

在这里输入图像描述

不可点击的:列是平的,当用户点击一个时不改变它们的外观:

 listView1.HeaderStyle = ColumnHeaderStyle.Nonclickable; 

在这里输入图像描述