Afficher des shapefiles

btisssam Messages postés 6 Date d'inscription jeudi 24 juillet 2014 Statut Membre Dernière intervention 7 août 2014 - 24 juil. 2014 à 14:07
btisssam Messages postés 6 Date d'inscription jeudi 24 juillet 2014 Statut Membre Dernière intervention 7 août 2014 - 28 juil. 2014 à 15:37
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

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
24 juil. 2014 à 14:40
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.


0
btisssam Messages postés 6 Date d'inscription jeudi 24 juillet 2014 Statut Membre Dernière intervention 7 août 2014
Modifié par btisssam le 24/07/2014 à 14:45
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;

        }

0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
24 juil. 2014 à 19:08
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/
0
btisssam Messages postés 6 Date d'inscription jeudi 24 juillet 2014 Statut Membre Dernière intervention 7 août 2014
28 juil. 2014 à 03:31
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.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
28 juil. 2014 à 06:21
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.
0
btisssam Messages postés 6 Date d'inscription jeudi 24 juillet 2014 Statut Membre Dernière intervention 7 août 2014
28 juil. 2014 à 15:37
Merci Whismeril
0
Rejoignez-nous