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 ビット モードでも動作しません。さらにもう 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);
}
Windowsフォームでこれを行う方法はすぐにはわかりませんが、コードで許可されている場合は、Windowsフォームの代わりにWPFアプリケーションを作成してみてください。その背後にあるコードは引き続き C# ですが、はるかに強化されたグラフィックの変更が可能です。
Windows フォームは、特定の視覚的な可能性をブロックすることがあります。
よろしく、 ケビン