環境: .NET Framework 2.0、VS 2008。
MouseDown
特定のマウス イベント ( 、MouseMove
、MouseUp
) を親コントロール (または最上位フォーム)に渡す特定の .NET コントロール (ラベル、パネル) のサブクラスを作成しようとしています。これを行うには、標準コントロールのインスタンスでこれらのイベントのハンドラーを作成します。たとえば、次のようになります。
public class TheForm : Form
{
private Label theLabel;
private void InitializeComponent()
{
theLabel = new Label();
theLabel.MouseDown += new MouseEventHandler(theLabel_MouseDown);
}
private void theLabel_MouseDown(object sender, MouseEventArgs e)
{
int xTrans = e.X + this.Location.X;
int yTrans = e.Y + this.Location.Y;
MouseEventArgs eTrans = new MouseEventArgs(e.Button, e.Clicks, xTrans, yTrans, e.Delta);
this.OnMouseDown(eTrans);
}
}
親コントロールでイベントを発生させるメソッドが保護されており、親コントロールの修飾子がないため、イベント ハンドラーをコントロールのサブクラスに移動できません。
System.Windows.Forms.Control.OnMouseDown(System.Windows.Forms.MouseEventArgs)
タイプ の修飾子を介して保護されたメンバーにアクセスできませんSystem.Windows.Forms.Control
。修飾子は型TheProject.NoCaptureLabel
(または派生型) でなければなりません。
サブクラスでコントロールのメソッドをオーバーライドすることを検討していますが、WndProc
誰かがよりクリーンなソリューションを提供してくれることを願っています。