C# - 在“封闭”的本地范围内使用变量?

时间:2016-04-27 14:35:58

标签: c# wpf scope variable-declaration

我正在尝试向C#应用程序添加一些新功能 - 特别是尝试复制它的一些行为,但是在Web浏览器中,而不是在应用程序中,就像现在一样。

我正在尝试从Browser.cs类的方法中调用MainWindow.cs类中定义的方法。

该方法在Browser.cs中定义:

public partial class Browser : Form{
    public Browser(){
        ...
    }
    public void Browser_Load(object sender, EventArgs e){
        webKitBrowser1.Navigate("https://google.com");
    }
    ...
}

然后我尝试从MainWindow.cs调用它,如下所示:

public partial class MainWindow : Window{
    ...
    public MainWindow(){
        ...
        Browser mBrowser = new Browser();
        Object sender = new Object();
        EventArgs e = new EventArgs();
        mBrowser.Browser_Load(sender, e);
        ...
    }
    ...
}

但是,我收到的编译错误是:

  

无法在此范围内声明名为“e”的本地或参数,因为该名称用于封闭的本地范围以定义本地或参数

这是什么意思?我之前从未遇到过这个错误 - 我在同一范围内使用变量,因为它已被声明 - 它是什么意思'封闭本地范围'?是因为我在括号内使用e来调用mBrowser.Browser_Load(sender, e)的方法吗?

当然,由于对此方法的调用与我定义e的范围相同,因此它不应该是范围问题?

我尝试使用以下方式执行调用:

mBrowser.Browser_Load(sender, EventArgs e);

但这给了我一个编译错误说:

  

'EventArgs'是一种类型,在给定的上下文中无效。

任何人都可以指出我在这里做错了什么,以及我应该做些什么才能正确调用此方法?

2 个答案:

答案 0 :(得分:5)

错误很明显,您已在范围中定义了e命名变量(可能在您尚未显示的代码部分中)

但更重要的是,您不应该像这样调用Load事件,而是在单独的方法中提取功能并从{{1}调用方法事件和其他地方。

像:

Load

答案 1 :(得分:0)

您已在范围内拥有名为e的变量。

尝试像这样调用你的方法

mBrowser.Browser_Load(this, EventArgs.Empty);

并且应该出错。