1

如何在 C# 中为列表视图的列标题创建一个“FlatStyle”按钮?我对此进行了一些研究,并发现了这段 VB 代码: http ://www.freevbcode.com/ShowCode.asp?ID=426

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

谢谢!

4

3 回答 3

1

该代码可以追溯到 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);
}
于 2011-10-23T20:55:16.480 回答
0

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

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

问候,凯文

于 2011-10-23T20:30:08.220 回答
0

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

如果您创建列表视图的列,则当用户显示详细视图时,列标题会出现并且其行为类似于常规按钮。这也意味着用户可以单击列标题并且您可以采取行动。如果您不希望这种外观和这种行为,您可以使列看起来是的。此特性由 ListView 类的 HeaderStyle 属性控制。此属性基于 ColumnHeaderStyle 枚举器。其成员为:

可点击:这是默认样式。列标题出现并表现得像按钮:

listView1.HeaderStyle = ColumnHeaderStyle.Clickable;

在此处输入图像描述

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

listView1.HeaderStyle = ColumnHeaderStyle.Nonclickable;

在此处输入图像描述

于 2011-10-23T20:40:03.753 回答