如何在 C# 中为列表视图的列标题创建一个“FlatStyle”按钮?我对此进行了一些研究,并发现了这段 VB 代码: http ://www.freevbcode.com/ShowCode.asp?ID=426
我不确定如何在 C# 中做到这一点,我也想知道是否有更好的方法来做到这一点。
谢谢!
如何在 C# 中为列表视图的列标题创建一个“FlatStyle”按钮?我对此进行了一些研究,并发现了这段 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;