Afficher des shapefiles

Signaler
Messages postés
7
Date d'inscription
jeudi 24 juillet 2014
Statut
Membre
Dernière intervention
7 août 2014
-
Messages postés
7
Date d'inscription
jeudi 24 juillet 2014
Statut
Membre
Dernière intervention
7 août 2014
-
Bonjour,

je suis entrain de développer une application dans laquelle je dois afficher deux shapfiles arcgis dans une seule picturebox.
j'ai mis deux checkbox, chacun a pour but de visualiser un shapefile
quand je coche les deux checkbox c'est le dernier coché qui s'affiche ,alors que je veux que les deux s'affiche.

SVP aidez moi,

Merci

4 réponses

Messages postés
16131
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 juillet 2021
556
Bonjour, pour que l'on puisse te dire ce qui ne va pas dans ton code, il faut le poster. Voirici comment utiliser la coloration syntaxique.


Messages postés
7
Date d'inscription
jeudi 24 juillet 2014
Statut
Membre
Dernière intervention
7 août 2014

voilà le code :

//checkbox 1
private void checkBox1_CheckedChanged_1(object sender, EventArgs e)
        {
            if (checkBox1.Checked == true)
            {
                mymap = new Map(pictureBox1.Size);
                VectorLayer v = new VectorLayer("batissesfinal", new PostGIS("server=localhost;port=5432;user=postgres;pwd=****;database=spatiale", "arteres", "geom", "gid"));
                mymap.Layers.Add(v);
              
                mymap.ZoomToExtents();
                pictureBox1.Image = mymap.GetMap();
             

            }
            else
                pictureBox1.Image = null;


//checkbox 2

  private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2 .Checked == true)
            {
            mymap = new Map(pictureBox1.Size);
            VectorLayer v2 = new VectorLayer("batissesfinal", new PostGIS("server=localhost;port=5432;user=postgres;pwd=****;database=spatiale", "perimetre", "geom", "gid"));
            mymap.Layers.Add(v1);
            mymap.ZoomToExtents();
            pictureBox1.Image = mymap.GetMap();
            }
            if (checkBox2.Checked == true)
            {
                mymap.Layers.Add(v2);
                mymap.ZoomToExtents();
                pictureBox1.Image = mymap.GetMap();
            }
            else
                pictureBox1.Image = null;

        }

Messages postés
16131
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 juillet 2021
556
Je vois plusieurs choses dans ton code

d'abord dans tes 2 méthodes
            else
                pictureBox1.Image = null;
donc si tu en décoches un tout s'efface, ça n'est pas le but si j'ai bien compris


Puis tester si
if (checkBox2 .Checked == true)
ne sert à rien, le contenu de la parenthèse doit correspondre à un bool, or Checked est un bool
donc
if (checkBox2 .Checked)
suffit.

Ensuite dans
           if (checkBox2 .Checked == true)
            {
            ...
            }
            if (checkBox2.Checked == true)
            {
              ...
            }
tu testes deux fois checkedBox2

A ta place je ferais une méthode pour gérer les deux chekbox, tu fais comme ça:

tu écris:
private void MaGestionDeCheckBox(object sender, EventArgs e)
{

}

Ensuite dans les propriétés de chaque ChekBox tu cliques sur le petit éclair

Tu navigues jusqu'à l'événement CheckedChange et tu clique sur la petite flèche bleue vers le bas.
Dans la liste déroulante, tu choisis la méthode MaGestionDeCheckBox


Maintenant les événements de tes deux checkedBox vont activer la même méthode, ça évite le code en double et simplifie la maintenance (si tu dois changer un bout de code, tu risques d'oublier de le faire deux fois!).

Maintenant, si j'ai compris ta démarche, la picturebox ne doit être vide que si aucun checkBox n'est coché donc je commencerais par ça
private void MaGestionDeCheckBox(object sender, EventArgs e)
{
      if (!checkBox1.Checked && !checkBox2.Checked)
      {
             pictureBox1.Image = null;
             return;//on n'a plus rien à faire dans cette méthode on sort    
       }
}


ou si tu veux éviter le return
            if (checkBox1.Checked || checkBox2.Checked)
            {
                  ......
            }
            else
                  pictureBox1.Image = null;



Maintenant pour superposer des images dans un pictureBox regarde ici
http://www.developpez.net/forums/d688812/dotnet/developpement-windows/windows-forms/plusieurs-images-picturebox/
Messages postés
7
Date d'inscription
jeudi 24 juillet 2014
Statut
Membre
Dernière intervention
7 août 2014

Merci Whismeril,

mais moi je cherche à afficher :

- si une des checkbox est cochée => son contenu qui sera affiché
- si les deux son cochées, les deux vont etre affichées
- si les deux sont cochées et je décoche apres une ,le contenu de l'autre doit rester dans le picturebox.
Messages postés
16131
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 juillet 2021
556
Oui, j'ai bien compris, mais,je ne vais pas faire tout le travail pour toi.
Je t'ai donné des pistes, à toi de les appliquer ou non.
Messages postés
7
Date d'inscription
jeudi 24 juillet 2014
Statut
Membre
Dernière intervention
7 août 2014

Merci Whismeril