2016-07-22 17 views
1

Buttonコントロールクラスから派生クラスを作成しました。私がコントロールを使用するとき、私はいくつかの状況で呼び出しから防ぐために行う必要があります。この状況は、派生クラスのmyClick関数ですでに定義されています。私はe.Cancel = trueを設定する方法があると推測しましたが、できません。この課題を解決するための簡単な提案はありますか?前の呼び出しメソッドでイベント呼び出しシーケンスを取り消す

public class SButton : Button 
{ 
    public SButton() : base() 
    { 
     Click += new System.EventHandler(myClick); 
    } 


    private void myClick(object sender, EventArgs e) 
    { 
     if(meHandsome) 
     { 
      // here I want to prevent no more event invocation! 
     } 
    } 
} 



public partial class UTeachAdvanced : DevExpress.XtraEditors.XtraUserControl 
{ 
    private void UTeachAdvanced_Load(object sender, EventArgs e) 
    { 
     SButton btn = new SButton(); 
     Controls.Add(btn); 
     btn.Click += new EventHandler(delegate(object sender, EventArgs args) 
     { 
      Console.Write("ugly"); 
     } 
    } 
} 

答えて

1

状況は、すでに派生クラスで定義されています。

Clickイベントは、Control.OnClickメソッドで発生します。 Clickイベントを発生させないようにするには、あなたがOnClickをオーバーライドして、クリックを防止するための基準が真でない場合にのみ、base.OnClickを呼び出すことができます。

public class SampleButton : Button 
{ 
    protected override void OnClick(EventArgs e) 
    { 
     if(!criteriaToPrevent) 
      base.OnClick(e); 
    } 
} 
+0

代わり_CLICK Event_加入のため、私は_onClick_機能をオーバーライド。できます! –

+0

はい、これはあなたが行くべき方法です:) –

関連する問題