Ouvrir des Form à partir d'un autre Form [resolu]

Ouvrir des Form à partir d'un autre Form [resolu] - C#/.NET managed - Programmation

Marsh Posté le 20-04-2015 à 11:41:21    

Bonjour à tous,  
 
Un sujet que je ne maitrise pas encore, est l'utilisation de plusieurs Forms dans un même projet.
 
Je travaille sur un "petit" logiciel de traitement d'image, et j'ai divisé ce programme en plusieurs
Form.cs exemple -> Egal.cs, extract.cs, ... qui correspondent à différents traitements.
Le tout étant dans un même projet.
 
Lorsque je suis sur mon Form principal, je souhaite appeler les traitement en cliquant dans mon menu,  
lmais comment appeler ces Forms?  
Lorsque je mets :  

Code :
  1. private void egalisationHistoToolStripMenuItem_Click(object sender, EventArgs e)
  2.         {
  3.              Form_Egal F1 = new Form_Egal();
  4.             F1.Show();
  5.         }


je ne trouve pas les forms que j'ai créé précédement.
 
J'ai cherché sur les forums et les commandes me crées des erreurs de compils :
 

Code :
  1. Erreur 9 Le type ou le nom d'espace de noms 'Form_Egal' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)


 
Je vous remercie de votre aide...
SI besoin, je peux rep par mp si besoin du projet en entier
 
Merci @ tous
 
@+


Message édité par clubber43 le 23-04-2015 à 20:56:35

---------------
Merci
Reply

Marsh Posté le 20-04-2015 à 11:41:21   

Reply

Marsh Posté le 20-04-2015 à 12:24:17    

Si tu veux contrôler finement les forms que tu ouvres/caches/ferme, tu dois écrire un gestionnaire qui s'occupera pour toi de chaque instance de form que tu crées afin de savoir à quoi elle correspond "fonctionnellement parlant".
Quand tu crées et ouvre "F1" c'est juste une form parmi d'autres.

 

Cependant tu peux voir la liste des forms actives dans une application en itérant sur la collection :
System.Windows.Forms.Application.OpenForms
Pour "reconnaitre" tes forms, avec le type et son titre on peut déjà faire pas mal de choses.
ex d'utilisation : http://www.c-sharpcorner.com/Blogs [...] ation.aspx

 

Ca t'aide ?


Message édité par TotalRecall le 20-04-2015 à 12:26:12

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 20-04-2015 à 13:11:24    

C'est deja un début :)
Merci pour ton aide.
 
Je vais y regarder encore un peu, mais du coup les forms que j'ai créés, je ne vais pas pouvoir les utiliser ?
Car sur l'exemple donné, il créé des form à partir de new. form().
 
Je vasi voir ce que je peux faire et je reviendrai si besoin.
 
Merci TotalRecall :)
 
@+


---------------
Merci
Reply

Marsh Posté le 20-04-2015 à 13:52:57    

Si si.
Regarde les exemples et relis, tu comprendras certainement.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 20-04-2015 à 13:57:39    

OK, je regarde mieux alors  :)
 
MErci


---------------
Merci
Reply

Marsh Posté le 20-04-2015 à 14:08:09    

juste au cas où, je depose mon mini projet sur dropbox :
https://www.dropbox.com/sh/xk4p7ngn [...] 7K1ba?dl=0
 
Merci bien pour l'aide en tout cas !!
 
@+


---------------
Merci
Reply

Marsh Posté le 20-04-2015 à 14:12:49    

J'ai refais les manip de l'exemple et mes forms s'ouvrent bien :)
Celles qui sont créées dans le new Form().
Mais lorsque je mets les forms déjà en place, il ne me les trouve pas.
 
En fait, elles ne sont pas "visibles" dans mon form1.cs
 
Je vois pas trop le souci, mais je vais trouver :)
 
j'y retourne lol
 
Merci TotalRecall pour ton aide.
 


---------------
Merci
Reply

Marsh Posté le 21-04-2015 à 21:28:02    

Et bien, je ne suis pas arrivé à lancer mes Forms...
Je ne vois pas où je me suis trompé
 
Le lien m'a fait  voir comment les créer et les afficher, mais je ne vois pas comment afficher les miennes...
 
SI quelqu'un peut regader mon projet et me dire si j'ai des erreurs..
 
MErci à tous


---------------
Merci
Reply

Marsh Posté le 21-04-2015 à 23:01:28    

Qu'est ce qu'un namespace ? Je t'invite à te documenter http://www.tutorialspoint.com/csha [...] spaces.htm
 
Le Form de base utilise le namespace "PictureHistogram" alors que les ceux de tes autres forms utilisent "namespace projecV6" ... ce qui fait que ces forms sont invisibles quand tu les recherches.
 
Il te suffit de renommer tes namespace avec même nom et tu pourras facilement faire ce que tu voulais

Code :
  1. Form_Egal F3 = new Form_Egal();
  2. F3.Text = "Egalisation Histogramme";
  3. F3.Show();


Message édité par caps lock le 21-04-2015 à 23:01:57
Reply

Marsh Posté le 22-04-2015 à 08:57:31    

Application.OpenForms se moque du namespace non ?
 
Je n'ai pas regardé le projet (pour DL il faut un compte dropbox [:benou]). Partage directement le code pertinent ici, c'est sensé être très court.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 22-04-2015 à 08:57:31   

Reply

Marsh Posté le 22-04-2015 à 09:11:57    

Ok, je le mets en copie asap.
 
Merci pour ton aide


---------------
Merci
Reply

Marsh Posté le 22-04-2015 à 09:12:46    

Sinon héberge le autre part, un truc sans compte. Pour un petit fichier comme ça c'est pas le choix qui manque.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 22-04-2015 à 09:21:42    

Là, c'est mieux :)
 
Merci


---------------
Merci
Reply

Marsh Posté le 22-04-2015 à 09:21:58    

C__projet_V6.7z - 514 KB


Message édité par clubber43 le 22-04-2015 à 09:23:07

---------------
Merci
Reply

Marsh Posté le 22-04-2015 à 10:05:15    

Je n'ai pas vu la moindre utilisation de OpenForms dans ton code.

 

Si ton but est juste d'ouvrir une form ton code est déjà bon, mais :
- il te manque la référence vers le namespace ou bien la correction de celui-ci, comme disait caps lock,
- dans ton programme je vois que tu mets des Form F1 = new Form(); alors que j'imagine que tu voulais créer des instances de tes forms à toi : Form_Egal et cie.

 

Donc remplace namespace PictureHistogram par namespace Projet_V3 en haut de form1
Et remplace New Form F3 = new Form(); par Form F3 = new Form_Egal(); et cie


Message édité par TotalRecall le 22-04-2015 à 10:14:44

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 22-04-2015 à 10:08:29    

OK, je viens de capter.
 
 

Citation :

Le Form de base utilise le namespace "PictureHistogram" alors que les ceux de tes autres forms utilisent "namespace projecV6" ... ce qui fait que ces forms sont invisibles quand tu les recherches.  
 
Il te suffit de renommer tes namespace avec même nom et tu pourras facilement faire ce que tu voulais


 
 
Désolé pour la perte de temps, je viens d'atterrir sur la réponse de CapsLock.
Et je vais modifier de suite.  
 
 

Citation :

- dans ton programme je vois que tu mets des Form F1 = new Form(); alors que j'imagine que tu voulais créer des instances de tes forms à toi : Form_Egal et cie.


 
C'est exactement cela.
Je vais travailler sur le code et je repasse ce soir.


Message édité par clubber43 le 22-04-2015 à 10:15:43

---------------
Merci
Reply

Marsh Posté le 22-04-2015 à 10:16:25    

J'ai édité mon message entre temps ci dessus entre temps ça devrait beaucoup t'aider.

 

C'est moi qui n'avait pas compris ta première demande, comme tu parlais "d'accéder aux forms" j'ai proposé Application.OpenForms mais ça n'est pas la réponse, toi tu es à quelque chose de beaucoup plus basique. Je n'avais pas vu que tu avais juste un souci de namespace, je croyais que tu cherchais à manipuler tes instances de fenêtres déjà ouvertes.


Message édité par TotalRecall le 22-04-2015 à 10:17:21

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 22-04-2015 à 10:19:40    

Vu que je commence les codes en c#,  
J'avoue être un peu perdu mais c'est vrai que l'édit du message précédent m'a mis de suite sur la route :)
 
Pour les projets assez simples, on peut rester sur ce type d'architecture, avec plusieurs forms et les appeler (comme je le fais)
Mais du coup tu parles des OpenForm, c'est pour els projets plus importants en terme de nombre de ligne de code, fenêtres, ... ?
 
Merci en tout cas et je vais modifier mon code asap.
 
Merci bien


---------------
Merci
Reply

Marsh Posté le 22-04-2015 à 10:23:02    

Ben ça dépend en gros de si tes "fenêtres filles" sont autonomes une fois ouvertes ou si tu as besoin parfois de leur envoyer des commande ou de les fermer depuis une autre.
 
Apres pour développer des applis multi fenêtre il y a plein d'approches : MDI, SDI, modale... Je te laisse creuser. Indépendamment du code ça peut déjà t'inspirer sur l'ergonomie.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 22-04-2015 à 10:24:15    

ok,  
Merci pour les infos. je vais m'y pencher dessus, c'est assez sympa le c#, assez rapide et facile (quand ça marche lol) à mettre en œuvre :)
 
Merci TotalRecall


---------------
Merci
Reply

Marsh Posté le 22-04-2015 à 10:38:25    

Pas de souci !
Si tu veux tailler le bout de gras sur .Net :  
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0  
:D


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 22-04-2015 à 10:42:19    

Je suis en congés dans 15 jours donc pourquoi pas en faie un peu :)
 
@+
 
Merci


---------------
Merci
Reply

Marsh Posté le 22-04-2015 à 21:37:53    

Bon, je me permets de revenir sur le forum, car malgré les réponses que vous m'avais apporté,  
je bug sur le namespace et je vois pas comment je le modifie.
Voila mon code avec les namespace :
 
sur le fichier F_NiveauDG.cs

Code :
  1. using System.Windows.Forms;
  2. using Projet_V3;
  3. using PictureHistogram;
  4. namespace Projet_V3
  5. {
  6.    
  7.     public partial class F_NiveauDG : Form
  8.     {
  9.         public F_NiveauDG()
  10.         {
  11.             InitializeComponent();
  12.         }
  13.         private void Post_NDG_Click(object sender, EventArgs e)


 
et de l'autre coté sur le fichier F_Princip.cs
 

Code :
  1. using System.Windows.Forms.Design;
  2. using Projet_V3;
  3. using PictureHistogram;
  4. namespace PictureHistogram
  5. {
  6.     public partial class Form1 : Form
  7.     {
  8.         public Form1()
  9.         {
  10.             InitializeComponent();
  11.             this.comboBox1.Enabled = false;
  12.             this.comboBox1.SelectedIndex = 0;
  13.         }
  14.                      
  15.         private void quitterToolStripMenuItem_Click(object sender, EventArgs e)


 
En suivant le conseil de caps, je devrai mettre les namespace dans ces fichiers? ou ailleurs?  
 
je vois aps trop comment faire. Car en mettant les namespace, j'ai pas mal d'erreurs...
 
Je suis un peu lourd, mais j'avoue être un peu perdu avec els .cs, designer.cs, ...
 
MErci @ vous


---------------
Merci
Reply

Marsh Posté le 22-04-2015 à 22:10:09    

Je vois pas où est le problème, en testant ton projet j'avais mis tous les namespaces sur PictureHistogram et c'est passé comme une lettre à la poste

Reply

Marsh Posté le 22-04-2015 à 22:14:46    

Mais lis des tutos [:fegafobobos:2]  
Je t'ai déjà donné la solution et caps lock aussi je crois.
 
Pour que les objets se "voient" les uns les autres ils doivent être dans le même namespace, OU inclure chacun les namespaces des trucs qu'ils ont besoin de voir. Un namespace c'est un conteneur commun pour grouper des classes.  
Généralement le nom du namespace reflète le nom du projet et le dossier dans lequel se trouve l'objet, mais ça n'est pas une obligation technique.  
Par exemple dans ton cas pour suivre le nom de ton projet toutes tes forms devraient être dans le namespace "Projet_V3".
 
Donc :  
- Soit tu mets tout le monde dans le même namespace en changeant "namespace PictureHistogram" par "namespace Projet_V3" en haut de chaque classe ou c'est nécessaire.
- Soit tu mets un using namespace PictureHistogram; en haut de chaque form qui a besoin de voir une form qui est dans PictureHistogram alors qu'elle est elle même dans autre chose.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 23-04-2015 à 09:13:07    

Ok,  
Car lorsque j'ai changé les namespace dans le projet, il ne reconnaissait plus les fonctions du F_Principale qui avait le namespace différent des autres.
Du coup, je change tous mes namespace par namespace PictureHistogram et les using et le script tournera du coup.
 
Je vous dirais cela ce soir car je suis en déplacement ce matin.
 
Merci encore :)


---------------
Merci
Reply

Marsh Posté le 23-04-2015 à 12:08:41    

C'est pas encore tout à fait ça l'idée mais d'ici ce soir en relisant ça ira sans doute mieux :whistle:


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 23-04-2015 à 12:56:01    

ok :)
Merci @+


---------------
Merci
Reply

Marsh Posté le 23-04-2015 à 20:55:49    

Et bien voilà,  
après relecture et comprehension des tuto, je suis arrivé :)
 
Merci à tous les 2 pour votre aide!!
 


---------------
Merci
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed