J'ai un problème avec mon programme que j'ai réussi à affiner dans un exemple de code.C# reconstruction fait tourner une partie de mon programme (chargement d'un contrôle utilisateur), et en cliquant sur play peut provoquer une reconstruction et l'exécuter deux fois
Ajouté Remarque - http://ge.tt/7paP1Gj2 < --- un lien vers mon fichier zip de 70 Ko de code.
C# rebuilding fait partie de mon programme (en chargeant un contrôle utilisateur), et cliquer sur play peut provoquer une reconstruction et l'exécuter deux fois. Double-cliquer sur le formulaire peut également le désactiver parfois. Je vais élaborer sur ce que je veux dire par là.
Mon programme a été créé de la manière suivante.
je clique droit sur le projet puis cliquez sur ajouter ... User Control
J'ai la forme et le contrôle de l'utilisateur.
J'ai le code suivant sous forme de charge et le code suivant dans le contrôle de l'utilisateur
private void Form1_Load(object sender, EventArgs e)
{
// any time i change this e.g. change the string e.g. change "loaded" to "loaddddd" and click Form1 in solution explorer. then the "uc loaded" messagebox comes up
MessageBox.Show("form loadeddd");
}
Et ce qui suit dans le contrôle utilisateur
private void UserControl1_Load(object sender, EventArgs e)
{
MessageBox.Show("uc loaded");
// any time i change this string then rebuild, then the "uc loaded" message box comes up.
string a="abc";
}
Alors maintenant je clique sur le jeu. "uc loaded" apparaît deux fois, et "form loaded" apparaît une fois.
Si je clique à nouveau sur lecture, (ne changeant aucun code), alors "uc loaded" apparaît une fois, "form loaded" apparaît une fois.
Si je double-clique sur Form1 dans l'explorateur de solutions, aucun comportement étrange ne se produit. Le formulaire apparaît juste. Aucune boîte de message n'est déclenchée.
Maintenant, disons que je change la chaîne de boîte de message "chargée de formulaire" par ex. "form loaded" à "form loadedd" Ensuite, je double-clique sur Form1 dans l'explorateur de solutions, et une boîte de message apparaît indiquant "uc loaded". Cela me semble étrange. Si je clique à nouveau sur Form1, "uc loaded" n'apparaît pas. Si je change à nouveau la chaîne et dbl cliquez sur Form1, la boîte de message "uc loaded" apparaît. Si je clique à nouveau sur Form1, il n'apparaît pas.
Maintenant, disons que je clique sur Lecture. Ensuite, je reçois "uc chargé" apparaissent deux fois. Comme si c'était peut-être d'abord une reconstruction (ce qui semble irrémédiablement exécuter la méthode de chargement du contrôle de l'utilisateur), (comme si cela avait été fait), puis l'exécution du programme. Si je clique à nouveau sur Play, "uc loaded" apparaît une seule fois. Si je change cette chaîne «formulaire chargé», alors je clique sur Lecture, puis «uc chargé» apparaît deux fois. Cliquez à nouveau sur lecture et il apparaît une fois. Si je change la chaîne "form loaded" ou la chaîne "uc loaded" ou l'autre chaîne, alors "uc loaded" apparaît deux fois, quand je clique sur play. Mon code a commencé avec plus de contenu et j'ai dupliqué le dossier et coupé et dupliqué le dossier et le couper, avant de le rendre aussi petit qu'il est tout en produisant encore le comportement. Mais dans le cas où le comportement n'est pas facilement reproductible .. j'ai inclus un lien vers mon code d'exemple coupé qui quand je l'essaye maintenant montre l'erreur et très proprement.
1. Ne pas reproduire la capacité 2. MessageBox affiche lors de la reconstruction? Vous n'exécutez même pas le programme ... – EpicKip
Au moment de la conception, les contrôles utilisateur peuvent être instanciés et le code commence à s'exécuter de façon inattendue - je ne sais pas si c'est lié à cela, mais voyez ce lien: http://stackoverflow.com/ questions/282014/net-windows-formes-design-time-rules – PaulF
@EpicKip que voulez-vous dire que ce n'est pas reproductible. Avez-vous même essayé de le reproduire? J'ai parlé de reconstruire (ce qui ne devrait pas vraiment le faire fonctionner), mais j'ai aussi parlé de cliquer sur Play (qui évidemment le lance), donc je ne sais pas de quoi vous parlez quand vous dites que je ne suis même pas en train de programme. – barlop