TabControlのMouseClickイベントでどのタブがクリックされたかが判らないのがとても不満です。.NETは面白いけど、
「なんでこんなことも出来ないの?ていうか出来るようにしてくんないの?」
と思うことが時々あります。
てことで、TabMouseClickEventArgsとかでっち上げてクリックされたタブを取得出来るようにしてみました。その名もTabMouseClickイベントです。ネーミングセンス悪くてすみません。変数とかメソッドとかクラスとか、ネーミングに非常に悩みます。
using System.Windows.Forms;
using System.Drawing;
namespace Anis.Controls {
/// <summary>TabMouseClickイベントを処理するメソッドを表します。</summary>
public delegate void TabMouseClickEventHandler(object sender, TabMouseClickEventArgs e);
/// <summary>タブ部分がクリックされた際に、
/// クリックされたタブを取得出来るTabMouseClickイベントを備えたTabControl</summary>
public class AnisTabControl: TabControl {
/// <summary>クリックされたタブが取得可能なMouseClickイベント/// </summary>
public event TabMouseClickEventHandler TabMouseClick;
/// <summary>XMLコメントが無いって警告うざい</summary>
public AnisTabControl(){
this.MouseClick += new MouseEventHandler(Class1_MouseClick);
}
void Class1_MouseClick(object sender, MouseEventArgs e) {
for(int i = 0; i <= this.TabPages.Count - 1; i++) { //
if(this.GetTabRect(i).Contains(e.X,e.Y)){ //この2行がキモでし。
TabMouseClickEventArgs E = new TabMouseClickEventArgs(
this.TabPages[i],e.Button,e.Clicks,e.X,e.Y,e.Delta);
this.TabMouseClick(sender, E);
}
}
}
}
/// <summary>TabMouseClickイベントのデータ</summary>
public class TabMouseClickEventArgs:MouseEventArgs {
private TabPage tabpage_;
/// <param name="tabPage">クリックされたタブに対応したタブページ</param>
public TabMouseClickEventArgs(
TabPage tabPage,MouseButtons button,int clicks, int x, int y ,int delta):base(
button,clicks,x,y,delta) {
tabpage_ = tabPage;
}
/// <summary>クリックされたタブに対応したタブページ</summary>
public TabPage TabPage {
get {
return tabpage_;
}
}
}
}
アップしたらXMLコメントのタグが外れてスッキリしてます。まるでただのコメントのようです。