C# 如何运行用户控件非常规事件

C# 如何运行用户控件非常规事件,c#,winforms,user-controls,C#,Winforms,User Controls,我有一个带有一些按钮的用户控件(tmNewItem、tmEdit、tmInsert) 我为他们写了一个clickButton事件 例如: public void btnEdit_Click(object sender, EventArgs e) { btnNew.Enabled = false; btnEdit.Enabled = false; } 我在另一个项目中使用了此用户控件,并为按钮编写了另一个方法,并将其分配给usr控件:

我有一个带有一些按钮的用户控件(tmNewItem、tmEdit、tmInsert)

我为他们写了一个clickButton事件

例如:

    public void btnEdit_Click(object sender, EventArgs e)
    {
        btnNew.Enabled = false;
        btnEdit.Enabled = false;
    }
我在另一个项目中使用了此用户控件,并为按钮编写了另一个方法,并将其分配给usr控件:

    public void DTedit(object sender, EventArgs e)
    {
    }

    private void UserControl_Load(object sender, EventArgs e)
    {
        DT_Navigator.btnCancel.Click += new EventHandler(DTedit);
    }
现在,当我运行项目并按下btnEdit按钮时,第一次,btnEdit_单击将执行,然后执行DTedit。我能换一下吗?我的意思是第一次运行DTedit(我在我的项目中定义了它),然后在运行btnEdit_单击(我在用户控件中定义了它)之后? 我该怎么做呢?

试试这个

建议代码

//User control

public event CancelEventHandler BeginEdit;
public event EventHandler EndEdit;


private btnYourButton_Click(object sender, EventArgs e)
{
    CancelEventArgs e = new CancelEventArgs();
    e.Cancel = false;
    if (BeginEdit != null)
        BeginEdit(this, e);
    if (e.Cancel == false)
    {
        if (EndEdit != null)
            EndEdit(this, new EventArgs);

        //You can place your code here to disable controls
    }
}

只需使用
-=
删除处理程序即可。例如,
DT_Navigator.btnCancel.Click+=neweventhandler(DTedit)从另一个事件调用事件是非常糟糕的做法。我建议你重新思考一下你在这里想做什么。@Nimesh你能解释得更多吗?thanks@Elahe为什么不将
DTedit
中的逻辑移到它自己的方法中呢。然后从
UserControl\u Load
DTedit
调用该方法。一种更具可扩展性和可维护性的方法things@paqogomez我希望如果DTedit中的逻辑代码成功完成,那么btnEdit_单击“完成”。例如:在DTedit中,我检查用户是否输入了真实数据?如果为true,我在btnEdit_Click中禁用btnEdit。那么,您想先设置执行顺序DTedit,然后再设置btnEdit_Click?为什么要在其Click事件中禁用按钮?用户必须按下该按钮才能将其禁用,但您已经确定要将其禁用。这没有任何意义。那么为什么不创建单独的验证方法呢?例如,创建两个事件。开始编辑和结束编辑。
//User control

public event CancelEventHandler BeginEdit;
public event EventHandler EndEdit;


private btnYourButton_Click(object sender, EventArgs e)
{
    CancelEventArgs e = new CancelEventArgs();
    e.Cancel = false;
    if (BeginEdit != null)
        BeginEdit(this, e);
    if (e.Cancel == false)
    {
        if (EndEdit != null)
            EndEdit(this, new EventArgs);

        //You can place your code here to disable controls
    }
}