スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C# MouseEnterとMouseHoverの違いについて サンプルコード


力技の1号、楽しみですね

今回はマウスイベントの中の

MouseEventMouseHoverについて検証したときのコードを載せます。
とりあえず一度実行してみてください。

FormSample3.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace myapp
{
class FormSample3{
public class Form1 : Form
{
private Panel panel1 = new Panel();
private Panel panel2 = new Panel();

//各コンポーネントの初期化
private void InitializeComponent(){
//Form
this.Size = new Size(300,300);
this.Load += new System.EventHandler(this.Form1_Load);

//panel1
this.panel1.Size = new Size(100,100);
this.panel1.Location = new Point(10,10);
this.panel1.BackColor = Color.White;
this.panel1.BorderStyle = BorderStyle.FixedSingle;
this.panel1.MouseEnter += new EventHandler(mouseEnter);
this.panel1.MouseLeave += new EventHandler(mouseLeave);

//panel2
this.panel2.Size = new Size(100,100);
this.panel2.Location = new Point(10,150);
this.panel2.BackColor = Color.White;
this.panel2.BorderStyle = BorderStyle.FixedSingle;
this.panel2.MouseHover += new EventHandler(mouseHover);
this.panel2.MouseLeave += new EventHandler(mouseLeave);

//システムで設定されているマウスホバー時間(初期設定では400)
Console.WriteLine("MouseHoverTime:" + SystemInformation.MouseHoverTime + "(msec)");
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender,EventArgs e)
{
this.Controls.Add(panel1);
this.Controls.Add(panel2);
}

//マウスイベント処理
private void mouseEnter(object sender, EventArgs e)
{
this.panel1.BackColor = Color.Red;
}
private void mouseHover(object sender, EventArgs e)
{
this.panel2.BackColor = Color.Blue;
}
private void mouseLeave(object sender, EventArgs e)
{
this.panel1.BackColor = Color.White;
this.panel2.BackColor = Color.White;
}
}
static void Main(){
Application.Run(new Form1());
}
}
}


実行すると、フォーム上に矩形のパネルが2つ表示されます。



この上にマウスを載せると、





パネルの色がそれぞれ変化します。

マウスカーソルの代わりにおほしさまを乗せてあります。



さて、このパネルの色の変化の仕方に少し違いがあるのですが、お気づきでしたでしょうか。

コードを見てみると、

this.panel1.MouseEnter += new EventHandler(mouseEnter);


this.panel2.MouseHover += new EventHandler(mouseHover);


HoverとEnterイベントがそれぞれに割り振ってあります。

違いはイベントが発生するタイミングです。



Enterはコントロール(今回はpanel1)にマウスカーソルが乗った瞬間にイベントが発生します。

対するEnterはコントロール(今回はpanel2)にマウスカーソルが乗った状態で、一定の時間が経過すると発生します。

なので、すごい速さでpanel2の上を通過すると色が変わりません。

あれです、デスクトップアイコンとかにカーソル乗せたとき

Enterのタイミングでアイコンの縁取りの色が変わり
Hoverのタイミングでアイコンの詳細情報がじわっと浮かび上がってくる

と考えるとわかりやすいです。



MouseHoverTime

MouseHoverイベントを利用するときの待ち時間はどこでわかるかというと、

SystemInformation.MouseHoverTime


このプロパティで知ることができます。
このサンプルでは、MouseHoverTimeの値をコンソール(コマンドプロンプト)に表示しています。

このプロパティは読み取り専用なので、プログラムからは変更することができません。

ユーザがシステム側から任意に変更できるようです(未検証)。

参考:Windows 7のWindows Aeroによるタスクバーのサムネイル表示を高速化する


ちなみにデフォルトは400、つまり0.4秒です。
数字で聞くと短く思えますが、実際に操作していると結構いらっとしますね。

即時に反応させたいイベントのときはMouseEnter、
じっくり(?)反応させたいイベントのときはMouseHoverと使い分けていきましょう。



それでは、今回はこの辺りで。
関連記事

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
非公開コメント
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。