「.NET質問箱」では、「どぼん!のプログラミング掲示板」に書き込まれた.NETプログラミングに関する投稿をQ&A形式にまとめ、紹介します。注意この記事の最新版は「DataGridの列ヘッダテキストの配置方法のみを変更する」で公開しています。【質問】Windowsアプリケーションで、DataGridコントロールの列ヘッダのテキストだけ中央に配置されるようにしたいのですが、どのようにすればよいのでしょうか?「DataGridの列のテキストの配置方法を変更する」で紹介されているように、DataGridColumnStyleのAlignmentプロパティを変更する方法では、ヘッダとデータの両方のテキストの配置が変更されてしまいます。DataGridの列のテキストの配置方法を変更する【回答】この問題で困っていらっしゃる方が多いようで(あるいは、簡単な解決法があって当たり前のはずなのに、なかなか見つからないということかもしれませんが)、同様の質問を何度かいただいております。Frameworkにはこの問題を解決する方法が用意されていません。普通の方法では、今のところ、どうしようもありません。何か方法がないものかと考えたところ、発想を逆転させ、ヘッダの配置を変えるのではなく、逆にデータの配置を変えるという方法を思いつきました。セルの表示方法は、DataGridColumnStyleのPaintメソッドをオーバーライドすることにより変更することができますので、Alignmentプロパティには列ヘッダの配置を指定し、Paintメソッドでセル内の文字列をAlignmentプロパティとは別の配置方法で描画するということができます。この考え方にしたがって、セル内の文字列の配置方法を変更できるDataGridColumnStyleの派生クラスを作成すると、例えば次のようになります。NamespaceこのDataGridCellAlignColumnクラスを使用するには、使用したい列の列スタイルにDataGridCellAlignColumnオブジェクトを設定し、DataGridCellAlignColumnのAlignmentプロパティに列ヘッダテキストの配置を指定し、CellAlignプロパティにセル内の文字列の配置を指定します。列スタイルを設定する詳しい方法は、次のページをご覧ください。注意この記事の最新版は「型(クラス、構造体など)のすべてのメンバを取得する」で公開しています。ここでは次のようなクラスが定義されているものとし、このクラスのメンバを取得します。"PublicMethodが呼び出されました。"PublicMethodが呼び出されました。}}ある型(クラス、値型、配列、インターフェイス、ポインタ、列挙体)のすべてのメンバ(プロパティ、メソッド、フィールド、イベントなど)を取得するには、TypeクラスのGetMembersメソッドを呼び出します。上記MyClassクラスのすべてのメンバ(継承されたメンバを除く)を列挙するには、次のようにします。m.Name);}この結果は、次のように表示されます。PublicEnum上記のように検索するメンバの種類を指定するために、BindingFlagsを指定してGetMembersメソッドを呼び出します。GetMembersメソッドでよく使用されるBindingFlagsには次のようなものがあります。パブリックメンバを検索の対象に加える。パブリックでないメンバを検索の対象に加える。非静的メンバ(インスタンスメンバ)を検索の対象に加える。静的メンバを検索の対象に加える。継承されたメンバを検索の対象にしない。階層構造の上位の静的メンバを検索の対象に加える。(つまり、28)を指定したのと同じになります。先に示したコードで、パラメータを指定しないでGetMembersメソッドを呼び出したとき、その結果は次のようになります。PublicEnumある型のすべてのプロパティ、メソッド、フィールド、コンストラクタ、インターフェイス、イベント、入れ子になっている型を取得するには、それぞれ、GetProperties、GetMethods、GetFields、GetInterfaces、GetEvents、GetNestedTypesメソッドを使用します。使い方は、戻り値が違う以外は、GetMembersメソッドと同じです。次にGetMethodsメソッドを使った例を示します。ここではMyClassクラスのすべてのメソッドを、そのアクセシビリティ、戻り値、パラメータ情報などとともに表示しています。Console.WriteLine();}結果は次のようになります。