在其他方法中调用带有参数的方法

时间:2017-12-29 09:47:52

标签: c# methods parameters

我有两种方法,第一次看起来很好。

但问题是RadWizard2_NextButtonClick方法的e参数返回radTxb_TextChanged方法的e参数值。

我尝试在其中一个方法中更改e参数的名称,但实际上它不应该返回null

知道为什么会这样或者我做错了吗?

protected void radTxb_TextChanged(object sender, EventArgs e)
{ 
    //dothings
    if (!opMsg.IsError)
    {
        RadWizard2_NextButtonClick(sender, e as WizardEventArgs); // arguments WITHOUT types    
    }
}

4 个答案:

答案 0 :(得分:1)

您必须创建 WizardEventArgs个实例,例如:

 protected void radTxb_TextChanged(object sender, EventArgs e) { 
   if (!opMsg.IsError) {
     // It seems you have to provide some parameters:
     // currentIndex and nextIndex which
     RadWizard2_NextButtonClick(sender, 
                                new WizardEventArgs(currentIndex, nextIndex)); 
   }
 }

如果您检查e个实例,则会发现EventArgs类型;并且EventArgs尚未从WizardEventArgs继承而来(恰恰相反:WizardEventArgs来自EventArgs

  e as WizardEventArgs

返回nulle EventArgs instabce不能被视为WizardEventArgs个实例)

答案 1 :(得分:0)

我知道我迟到了,但你可能只能逃脱null

protected void radTxb_TextChanged(object sender, EventArgs e)
{ 
    //dothings
    if (!opMsg.IsError)
    {
        RadWizard2_NextButtonClick(sender, null); // arguments WITHOUT types    
    }
}

答案 2 :(得分:0)

让我提出一个不同的方法。

您正尝试直接调用UI事件处理程序 。这几乎总是一个坏主意。事件处理程序旨在处理事件,而不是用作库方法。

如果您需要RadWizard2_NextButtonClick方法中的radTxb_TextChanged代码,请将其解压缩为新方法:

在:

protected void RadWizard2_NextButtonClick(object sender, WizardEventArgs e)
{
    ... // some code here
}

后:

protected void RadWizard2_NextButtonClick(object sender, WizardEventArgs e)
{
    DoStuff();
}

private void DoStuff()
{
    ... // some code here
}

现在,您可以使用DoStuff方法拨打radTxb_TextChanged

答案 3 :(得分:0)

当你需要做某事时,写一个完全符合你需要的方法。给它一个名称来描述它的作用,并只给它需要的参数。然后,您可以从事件处理程序或其他任何地方调用该方法。您也可以将该方法放在一个单独的类中,这样您就可以在页面中重复使用它,并防止代码变得太大。

内置的事件处理程序通常包含甚至不使用的模糊参数,并且不会被转换为正确的类型,这一点很奇怪,例如:

protected void radTxb_TextChanged(object sender, EventArgs e)

显然,发件人不会成为任何对象。它将成为一种特定类型的控制。事件args也将属于特定类型。他们的演员方式意味着他们不重要,在许多情况下他们甚至不会被使用。我们知道发生了什么只是因为方法被触发了,我们对此做出反应并忽略了这些论点。

但我们不需要遵循该惯例。我们可以根据自己的要求编写我们的方法。如果您想在事件触发后使用RadWizard执行某些操作,则可以编写所需的方法:

public void DoSomethingWithTheRadWizard(RadWizard radWizard)

在事件处理程序中,从参数中提取所需的任何值,然后调用更具体的方法。当使用所有参数并将每个参数声明为正确的类型时,读取和理解将更加容易。