1

C#でリストビューの列ヘッダーに「FlatStyle」ボタンを作成するにはどうすればよいですか? これを少し調べたところ、VB のこのコードに出くわしました: http://www.freevbcode.com/ShowCode.asp?ID=426

C# でこれを行う方法がわかりません。これを行うためのより良い方法があるかどうかも知りたいです。

ありがとう!

4

3 に答える 3

1

そのコードは Vista より前にさかのぼり、ヘッダー コントロールの新しい Vista ビジュアル スタイルでは機能しなくなりました。また、ビジュアル スタイル レンダリングをオフにする必要があります。また、最近では一般的な 64 ビット モードでも動作しません。さらにもう 1 つの副作用は、ユーザーが列ヘッダーをホバリングしたときに視覚的なフィードバックが得られなくなることです。これは、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);
}
于 2011-10-23T20:55:16.480 に答える
0

Windowsフォームでこれを行う方法はすぐにはわかりませんが、コードで許可されている場合は、Windowsフォームの代わりにWPFアプリケーションを作成してみてください。その背後にあるコードは引き続き C# ですが、はるかに強化されたグラフィックの変更が可能です。

Windows フォームは、特定の視覚的な可能性をブロックすることがあります。

よろしく、 ケビン

于 2011-10-23T20:30:08.220 に答える