C#- Verwendung einer Variablen in einem "umhüllen", im lokalen Bereich?
Ich versuche, fügen Sie einige neue features, um eine C# - Anwendung - insbesondere, versuchen zu replizieren, werden einige Ihrer Verhaltensweisen, sondern in einem web-browser in der Anwendung, sondern, wie es derzeit ist.
Ich versuche eine Methode aufzurufen, der definiert wurde, in der Browser.cs
Klasse innerhalb einer Methode in der MainWindow.cs
Klasse.
Die Methode ist definiert in Browser.cs
mit:
public partial class Browser : Form{
public Browser(){
...
}
public void Browser_Load(object sender, EventArgs e){
webKitBrowser1.Navigate("https://google.com");
}
...
}
Ich bin dann zu versuchen, rufen Sie es von MainWindow.cs
wie folgt:
public partial class MainWindow : Window{
...
public MainWindow(){
...
Browser mBrowser = new Browser();
Object sender = new Object();
EventArgs e = new EventArgs();
mBrowser.Browser_Load(sender, e);
...
}
...
}
Aber, ich bekomme einen compile-Fehler, der sagt:
Einem lokalen oder einem parameter mit dem Namen " e " deklariert werden können, in diesem Umfang, weil dieser name wird verwendet, in einem umschließenden lokalen Bereich zum definieren eines lokalen oder parameter
Was bedeutet das? Ich habe noch nie über diesen Fehler vor - ich bin mit der variable innerhalb des gleichen Bereichs wie, wo es erklärt wurde - was bedeutet es, von "umhüllen lokalen scope'? Ist das, weil ich bin mit e
innerhalb der Klammern für den Methodenaufruf an mBrowser.Browser_Load(sender, e)
?
Sicher, da der Aufruf dieser Methode ist in dem selben Umfang wie denen, die ich definiert haben e
, es sollte nicht sein ein Problem von Umfang?
Ich habe versucht, die Durchführung der Ausschreibung:
mBrowser.Browser_Load(sender, EventArgs e);
aber das gab mir einen compile-Fehler sagen:
'EventArgs' ist eine Art, die nicht gültig sind in dem gegebenen Kontext.
Kann mir jemand erklären, was ich falsch mache hier, und was soll ich tun, um in der Lage sein, um diese Methode aufrufen, richtig?
- Haben Sie so etwas wie
catch(Exception e)
in der Methode ? - Du verwendest zwei Variablen namens e in demselben Umfang. Normalerweise tritt aufgrund eines Ereignisses, genannt e, sowie eine Ausnahme. Ändern Sie Ihre Ausnahme von der ex, oder benennen Sie Ihre Veranstaltung von der e auf die Veranstaltung, und Sie werden in Ordnung sein. Sie können auch EventArgs.Leer, wenn Sie einfach eine Standard-EventArgs-Objekt mit Standard-Eigenschaften.
- Brilliant - verpasst, die ich genannt
Exception
'e' als auch - Dank sehr viel! mBrowser.Browser_Load(sender, EventArgs e);
ist nicht gültig, Sie hätten verwendenmBrowser.Browser_Load(sender, e);
, einfach nur sagen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist der Fehler klar, den Sie bereits definiert haben
e
benannte variable in Ihrem scope, (Wahrscheinlich in dem Teil des Codes, Sie haben nicht gezeigt).Aber noch wichtiger ist, Sie sollten nicht den Aufruf der
Load
Ereignis wie das, statt extrahieren Sie die Funktionalität in eine separate Methode und rufen Sie die Methode von IhremLoad
Ereignis und anderen Orten.Wie:
e
es schon - ich habe gerade erst angefangen, Suche auf diesem code.e
, die meisten Menschen nennen Sieex
. Es ist nicht empfohlen, mit e, da es verwendet wird, die durch Ereignisse (wie du gerade gemerkt.).Browser_Load()
Methode? Die Methode definiert wurde, inBrowser.cs
, so dass es bereits in einer separaten Methode ist es nicht?Browser_Load
ist innerhalb eines Ereignisses, es ist zwar eine Methode aber auch, ist es in der Regel als schlechte Praxis der explizite Aufruf von Veranstaltungen. Ereignisse werden angenommen, um auftreten. Wenn Sie wollen explizit aufrufen, wird der code innerhalbBrowsers_Load
Fall, dann ist es besser, zu extrahieren, dass der code in eine separate Methode, und rufen Sie dann diese Methode ausLoad
Ereignis und anderen Orten.System.Windows.Forms
... keine Ahnung, wie ich dies tun?WebBrowser
WPF ?Browser
Klasse, die ich bereits in meine OP ist über der ZeilewebKitBrowser1.Navigate("https://www.google.com");
innerhalb derBrowser_Load(object sender, EventArgs e)
Funktion - allerdings sehe ich nicht alles, was tatsächlich aussieht wie ein browser in der Anwendung, wenn ich es laufen...Browser
Klasse, das es definiert ist mit:public partial class Browser : Form{ ... }
. Sollte das: WebBrowser{ ... }
statt: Form{ ... }
?Haben Sie bereits eine variable mit dem Namen
e
im Rahmen.versuchen, rufen Sie Ihre Methode, wie diese
mBrowser.Browser_Load(this, EventArgs.Empty);
und der Fehler sollte gehen.