在先前调用的方法中取消事件调用序列

时间:2016-07-22 00:02:51

标签: c# winforms

我从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 个答案:

答案 0 :(得分:1)

  

已在派生类中定义了这种情况。

Click事件由Control.OnClick方法引发。为防止引发Click事件,您可以覆盖OnClick并仅在防止点击的条件不符合时调用base.OnClick

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