En C# à l'aide d'une variable dans une "enveloppant" locale?
Je suis en train d'ajouter de nouvelles fonctionnalités à une application C# en particulier, en essayant de reproduire certains de ses comportements, mais à l'intérieur d'un navigateur web, plutôt que dans l'application, comme c'est le cas actuellement.
Je suis en train d'appeler une méthode qui a été défini dans le Browser.cs
classe à partir de l'intérieur d'une méthode dans le MainWindow.cs
classe.
La méthode est définie dans Browser.cs
avec:
public partial class Browser : Form{
public Browser(){
...
}
public void Browser_Load(object sender, EventArgs e){
webKitBrowser1.Navigate("https://google.com");
}
...
}
Je suis ensuite essayer de l'appeler à partir d' MainWindow.cs
comme suit:
public partial class MainWindow : Window{
...
public MainWindow(){
...
Browser mBrowser = new Browser();
Object sender = new Object();
EventArgs e = new EventArgs();
mBrowser.Browser_Load(sender, e);
...
}
...
}
Mais, j'ai une erreur de compilation qui dit:
Un local ou d'un paramètre nommé " e " ne peuvent pas être déclarées dans le présent champ d'application, car ce nom est utilisé dans un enfermant une portée locale pour définir un local ou d'un paramètre
Qu'est-ce que cela signifie? Je n'ai jamais rencontré cette erreur avant - je suis l'aide de la variable à l'intérieur de la même portée que lorsqu'il a été déclaré - que faut-il dire par "en joignant une portée locale'? Est-ce parce que je suis en utilisant e
l'intérieur de la parenthèse pour l'appel de méthode à mBrowser.Browser_Load(sender, e)
?
Sûrement, puisque l'appel de cette méthode est à l'intérieur du même champ d'application que lorsque j'ai défini e
, il ne devrait pas être un problème de portée?
Je n'ai essayez d'effectuer un appel avec:
mBrowser.Browser_Load(sender, EventArgs e);
mais cela m'a donné une erreur de compilation en disant:
'EventArgs' est un type, qui n'est pas valide dans le contexte donné.
Quelqu'un peut-il point de ce que je fais de mal ici, et ce que je devrais faire pour être en mesure d'appeler cette méthode correctement?
- Avez-vous quelque chose comme
catch(Exception e)
dans la méthode ? - Vous êtes à l'aide de deux variables appelées e dans le même champ d'application. Se produit habituellement en raison d'un événement appelé e, ainsi que d'une exception. Changez d'exception ex, ou renommer votre événement de e à l'événement, et vous serez amende. Vous pouvez également utiliser EventArgs.Vide, si vous avez simplement besoin d'un défaut EventArgs objet avec les propriétés par défaut.
- Brillant manqué que j'avais appelé à la
Exception
'e' comme bien merci beaucoup! mBrowser.Browser_Load(sender, EventArgs e);
n'est pas valide, vous devez utiliser lemBrowser.Browser_Load(sender, e);
, juste en disant
Vous devez vous connecter pour publier un commentaire.
L'erreur est assez clair, vous avez déjà défini
e
variable nommée dans votre périmètre, (Probablement dans la partie de code que vous n'avez pas indiqué).Mais plus important encore, vous ne devriez pas appeler la
Load
événement comme ça, au lieu extrait de la fonctionnalité dans une méthode séparée et d'appeler la méthode de votreLoad
événement et d'autres endroits.Comme:
e
déjà là - je ne l'ai juste commencé à regarder ce code.e
, la plupart des gens, le nom de leurex
. Il n'est pas recommandé d'utiliser e puisqu'il est utilisé par les événements (comme tu viens de réaliser.).Browser_Load()
méthode? Cette méthode a été définie dansBrowser.cs
, de sorte qu'il est déjà dans une autre méthode, n'est-ce pas?Browser_Load
est à l'intérieur d'un événement, même si c'est une méthode trop mais, il est généralement considéré comme une mauvaise pratique appeler explicitement les événements. Les événements sont supposons que pour se. Si vous voulez appeler explicitement le code à l'intérieurBrowsers_Load
cas, alors il est préférable d'extraire le code d'une méthode distincte et puis appelez la méthode deLoad
événement et d'autres endroits.System.Windows.Forms
... une idée de comment je pourrais faire cela?WebBrowser
à partir de WPF ?Browser
classe que j'ai noté dans mon OP est à l'aide de la ligne dewebKitBrowser1.Navigate("https://www.google.com");
à l'intérieur de laBrowser_Load(object sender, EventArgs e)
fonction - cependant, je ne vois rien qui ressemble en fait à un navigateur dans l'application lorsque je le lance...Browser
de la classe à laquelle il est défini avec:public partial class Browser : Form{ ... }
. Devraient-ils être: WebBrowser{ ... }
au lieu de: Form{ ... }
?Vous avez déjà une variable nommée
e
dans le champ d'application.essayez d'appeler votre méthode comme ceci
mBrowser.Browser_Load(this, EventArgs.Empty);
et le message d'erreur devrait aller.