2013年12月13日

DataGridViewの列ヘッダーの結合(C#)(3)


こんにちは


DataGridViewの列ヘッダーの結合の進化版ができました!!


列ヘッダーを2行表示にしてみました。


dgv.png


これで複数のグループに存在している同じ列名のものも、見やすくなりました!!



次はやはりセルの結合か・・・。

セルの結合は、見た目だけじゃなく編集もできるようにしないといけないので、結構難しいのです・・・。


posted by Kodai at 09:53| Comment(2) | C#

2013年10月17日

マウスカーソルの変更


通常、マウスカーソルの変更する場合、

this.Cursor = Cursors.Arrow;

で変更できますが、これでは標準のマウスカーソルしか使用できません。


そこで、自作のマウスカーソルを作成し、それを使用する方法を紹介します。


1.自作マウスカーソルを作成する。

 マウスカーソルファイル(拡張子cur)を作成します。
 作成ツールは自分で考えてください。(←手抜きですみません)


2.自作マウスカーソルをリソースファイルに登録する。

 作成したマウスカーソルを一定のフォルダ(絶対パス)に置いて、それを使用する方法もありますが、
 実行環境に左右されるので、ここではリソースに登録しそれを使用します。

 VSの「プロジェクト」→「既存項目の追加」より、「ファイルの種類」をすべてのファイル(*.*)を
 選択し、自作マウスカーソルファイルを追加する。

 追加されたファイルがソリューションエクスプローラに表示されるので、そのプロパティを表示。

 プロパティ内の「ビルドアクション」を「埋め込まれたリソース」に変更する。


3.リソース内のマウスカーソルを使用する。

 下記コードのように使用します。
 ※ ここでは、自作マウスカーソルの名前を"MyCursor.cur"として説明します。


 System.Reflection.Assembly asm
    = System.Reflection.Assembly.GetExecutingAssembly();

 Cursor myCursor
    = new Cursor(asm.GetManifestResourceStream(asm.GetName().Name + ".MyCursor.cur"));
 this.Cursor = myCursor;


以上でマウスカーソルが変わります。


posted by Kodai at 15:06| Comment(0) | C#

2013年10月02日

ボタンの背景色が元に戻らない〜(T_T)


ボタンの背景色をマウスオーバー時に変更し、マウスアウト時に元に戻す場合の動作について。

以下のように実装すると・・・

bool onMouseEnter = false;
protected override void OnMouseEnter(MouseEventArgs e)
{
onMouseEnter = true;
base.OnMouseEnter(rowIndex);
}

protected override void OnMouseLeave(MouseEventArgs e)
{
onMouseEnter = false;
base.OnMouseLeave(rowIndex);
}

これで動作確認してみます。

マウスをゆっくり動かした場合、マウスアウトしているのに背景色がマウスオーバー時にままになってしまいます。必ず発生する訳ではありませんが、ちょっと気になります(-_-;)


発生する原因はイマイチ解りませんでしたが、マウスイベントには発生する優先順位があるらしいですね。
1.MouseEnter
2.MouseMove
3.MouseHover / MouseDown / MouseWheel
4.MouseUp
5.MouseLeave

そこで、

以下を追加してみました。

MouseMoveイベントを利用して、マウスカーソルがボタンの領域から外れた場合にフラグをOFFしています。

protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (!this.ClientRectangle.Contains(e.Location))
onMouseEnter = false;
this.Invalidate();
}

これで解決しました。(^−^)

posted by Kodai at 15:34| Comment(0) | C#