J'ai le scénario suivant J'ai un formulaire principal en tant que parent MDI et formulaire enfant MDI, le formulaire enfant affiche un nouveau formulaire (je l'ai appelé mydialog). Je veux accéder à la fonction spécifique dans le formulaire enfant MDI de mydialog donc j'ai essayé de définir la propriété Owner dans l'objet mydialog mais l'exception est survenue (exception de référence circulaire) aussi les propriétés Parent et ParentForm de mydialog sont nulles, j'ai fait un rapide et sale soluion en utilisant la propriété Tag de mydialog. Je cherche une meilleure solution et pourquoi il y a une exception quand je mets la propriété Owner de mydialogPassage de données entre les formulaires
Répondre
donc j'ai essayé de définir la propriété du propriétaire dans l'objet myDialog mais exception ont été observés (exception référence circulaire)
Il devrait y avoir aucune exception lors du réglage du Propriété du propriétaire. Pouvez-vous coller l'exception? Aussi pourriez-vous coller votre code qui définit cette valeur? Avez-vous défini d'autres propriétés comme MDIParent/etc?
EDIT: Code mise à jour
Essayez ce qui suit, il devrait fonctionner
groupsettingsform mydialog= new groupsettingsform(); //create dialog
mydialog.Owner= this; //set owner MDI child form
mydialog.ShowDialog(); // <== DO NOT PASS THE OWNER
c'est mon code simple (existe dans le formulaire enfant MDI) groupsettingsform mydialog = new groupsettingsform(); // crée un dialogue mydialog.Owner = this; // Définir le propriétaire MDI enfant formulaire mydialog.ShowDialog (this); si je commente la ligne de Owner = this, le propriétaire de mydialog sera le formulaire parent MDI –
merci mais ce qui se passe réellement, pourquoi quand j'ai supprimé le paramètre passing le propriétaire sera MDI enfant, et si je l'ai passé (sans définir le propriétaire explicitement) le propriétaire sera parent MDI ?? –
Oui. Un peu étrange. J'essaie de résoudre le mystère ;-) – Preets
Pouvez-vous nous montrer le code que vous utilisiez pour montrer la boîte de dialogue, Une des méthodes ShowDialog prend un objet parent comme un paramètre qui peut faire ce que vous cherchez.
vous pouvez créer un constructeur paramétrés dans MyDialog comme
public MyDialog(object param1)
passer vos données
MyDialog frm = new MyDialog("data");
frm.ShowDialog();
ou créer une propriété publique à MyDialog comme
public object Data {get; set;}
et définir quand instancier votre boîte de dialogue
MyDialog frm = new MyDialog(); frm.Data = "vos données ici"; frm.ShowDialog();
HTH,
il est bon mais je pense qu'il n'est pas le meilleur comme si je veux accéder à beaucoup de données de formulaire enfant MDI je dois le copier dans mydialog formulaire –
Réglage du propriétaire ne doit pas jeter une exception ... Essayez ceci en vous forme MyDialog
((YourMDIChildForm)Owner).YourMDIChildFormMethod();
Ma réponse simple jusqu'à maintenant est d'utiliser la propriété Tag, mais je pense qu'il y a un meilleur moyen
groupsettingsform mydialog = new groupsettingsform(); mydialog.Tag = ceci; mydialog.ShowDialog (this);
Je préfère transmettre des données ou des paramètres personnalisés au formulaire par son constructeur. C'est la manière la moins spécifique à "WinForms" et en fait n'est pas différente de la construction de la plupart des autres objets.
Dans d'autres cas, j'aime définir les propriétés sur le formulaire. Cela semble être aussi une convention WinForms.
Il est préférable d'utiliser Tag ou de tirer des données du propriétaire. Comme les deux nécessitent un moulage explicite, ils ne sont pas particulièrement élégants.
- 1. Passage de paramètre sans utilisation de formulaires HTML dans JSP
- 2. Passage de valeur entre les contrôles utilisateur Web - DifferentQuestion
- 3. windows.form C# déplacement entre formulaires
- 4. Données entre les éléments
- 5. Différence entre les formulaires HTML soumettre des balises
- 6. Valeurs entre les formulaires Windows en C# .NET
- 7. Création de formulaires pour les données relationnelles dans Rails
- 8. Comment effacer tous les formulaires/données de grille dans Silverlight?
- 9. Bases de données entre les serveurs Copie
- 10. Comment interpoler entre les points de données?
- 11. Fusion de données entre les bases de données
- 12. Passer les données entre les composants flex
- 13. AJAX et les formulaires
- 14. Copier les tables entre les bases de données d'accès
- 15. Passage de valeurs entre les onglets dans AJAX tabcontainer dans ASP.net
- 16. Persistance des données WCF entre les sessions
- 17. .NET MVC et de transmettre en toute sécurité les données entre les pages
- 18. WPF: Passage d'objets entre thread Thread et Background UI
- 19. PartialView dans les formulaires Web
- 20. Passage de données par des intentions au lieu de constructeurs
- 21. Passage des paramètres dans les rails redirect_to
- 22. Passage de Castor à JPA
- 23. Basculer entre les fournisseurs de données (Flex 2.0)
- 24. Transférer des données de cookie entre les iframes
- 25. Comment activer les jointures entre bases de données dans mysql?
- 26. visualiser les associations entre deux groupes de données
- 27. Limitation des données de point d'extension fournies entre les plugins
- 28. Passage initial dans ModelFormSet de Django
- 29. Contrôles de validation pour les formulaires Windows?
- 30. JQuery Soumettre conditionnellement les formulaires
vous devriez mettre dans l'exception avec votre question :) –
l'exception est "Une référence de contrôle circulaire a été faite.Un contrôle ne peut pas être détenue par ou parented à lui-même." pour le code suivant groupsettingsform myDialog = new groupsettingsform(); // créer de dialogue mydialog.Owner = this; // propriétaire = MDI enfant sous forme mydialog.ShowDialog (this); // afficher la boîte de dialogue –
Vous avez vos références mélangé. L'erreur vous indique exactement ce que vous faites mal. Vous définissez accidentellement le parent du formulaire sur lui-même. Il semble que votre formulaire enfant ne soit pas défini comme enfant MDI. Assurez-vous que la propriété parent MDI est définie avant d'appeler Show(). –