簡體   English   中英

如何在列表視圖中創建平面列標題按鈕(Windows Forms C#)

[英]How to create a flat columnheader button in listview (Windows Forms C#)

如何在C#中為列表視圖的列標題創建“ FlatStyle”按鈕? 我對此進行了一些研究,發現了VB的以下代碼: http : //www.freevbcode.com/ShowCode.asp? ID= 426

我不確定如何在C#中做到這一點,我也想知道是否有更好的方法可以做到這一點。

謝謝!

該代碼可以追溯到Vista之前,並且不再與標題控件的新Vista視覺樣式配合使用。 您還需要關閉視覺樣式渲染。 如今,它也無法在64位模式下工作。 另一個副作用是,當用戶將鼠標懸停在列標題上時,不再會收到視覺反饋,這是關閉HDS_BUTTON樣式標志的不可避免的副作用。

順便說一下,這是使標頭看起來平坦的代碼。 將新類添加到您的項目中,然后粘貼以下代碼。 編譯。 將新控件從工具箱的頂部拖放到窗體上。

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;

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM