Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boite de dialogue pour validation

UserControl

    3 juin 2011 à 16:50:49

    Bonjour les zér0s :)

    Je viens une fois de plus a vous à cause de petit soucis d'implémentation. D'un gros en fait...

    Jusqu'à présent, j'avais un UC qui me permettait d'afficher une boite de dialogue informant d'une action ou d'une erreur.
    J'ai voulu améliorer celle-ci afin de pouvoir interagir à l'aide de deux boutons (Valider et annuler) dans le cas d'une demande de confirmation, d'un boutons (OK) lors de l'annonce d'une erreur ou du succès d'une opération et eventuellement 0 ou n boutons ^^.

    Pour se faire, j'ai ajouté un panel pour contenir les boutons.
    Seulement voila, je n'arrive pas associer mes boutons à des events.

    Voila ce qu'il en ai :

    J'ai une fonction qui me permet d'afficher la UCMessageBox. Je lui passe en paramètre, pour l'instant, un titre, un message et deux boutons. Ces boutons, je les créer dans une autre classe qui est la classe représentative de la page contenant le UC. L'idée étant à terme de passer une collection de boutons (voir de controls mais ne précipitons pas les choses).

    Voici ma fonction, situé dans le code-behind de mon UC

    public void AfficherMessage(string titre, string message)
        {
            this.Titre = titre;
            this.Message = message;
            this.Visible = true;
        }
    
        public void AfficherMessage(string titre, string message, Button b, Button b2)
        {
            AfficherMessage(titre, message);
            this.boutons.Controls.Add(b);
            this.boutons.Controls.Add(b2);
        }
    


    Et voici la manière dont je l'appel dans ma page, contenant un UCMessageBox, que je souhaite remplir dynamiquement avec deux boutons :

    //fonction appelé sur clique du ImageButton visant à la suppression d'une intervention
     public void delete_onClick(object sender, ImageClickEventArgs e)
            {
                Button b1 = new Button(), b2 = new Button();
                b1.Text = "Oui";
                b2.Text = "Non";
                b1.ID = ((ImageButton)sender).ID;
                b1.Click +=new EventHandler(b1_Click);
                messValidation.AfficherMessage("Confirmation", "Vous allez supprimer une intervention. Souhaitez-vous continuer ?",b1,b2);
                
            }
    // evenement qui supprime l'intervention de ma base de donné. Cet evenement est associé à b1 définit dans la fonction précédente.
    // cet event n'est jamais atteind
            public void b1_Click(object sender, EventArgs e)
            {
                var inter = from INTERVENTION i in context.INTERVENTION
                            where i.INTEID == int.Parse(((Button)sender).ToString())
                            select i;
                context.INTERVENTION.DeleteOnSubmit(inter.Single());
                context.SubmitChanges();
                this.label_auteur_demande.Text = "NOT A FAIL";
            }
    



    Je crois que vous l'aurez compris, mes boutons s'affichent, mais ne fonctionnent pas. J'ai beau retourner le problème dans tous les sens, je n'y arrive pas. J'ai essayé d'insérer mon event dans le code behind de mon UC mais même cela n'est pas opérationnel.
    Si quelqu'un se sent capable de m'aider, je lui en serais très reconnaissant.

    Cordialement,

    Gregoriz
    • Partager sur Facebook
    • Partager sur Twitter
      3 juin 2011 à 21:07:22

      A mon avis tu essai de faire compliqué pour pas grand chose.

      Y'a quelque temps je m'étais crée une petite DLL input box, pour ce genre de chose, elle permet d'afficher un message (une question ou quelque chose du genre) et d'avoir des bouton OK/Annuler. mais aussi d'autres choses comme un prompt (un champ à remplir puis click sur ok et ça renvoie la valeur).

      Voici une petite partie du code, si ça t'interesse je peut te passer al DLL complete.

      inputbox.cs

      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Drawing;
      using System.Linq;
      using System.Text;
      using System.Windows.Forms;
      
      namespace InputBox
      {
          public partial class InputBox : Form
          {
              private String Value;
      
              public InputBox()
              {
                  /**/
                  this.Controls.Add(new Label());
      
                  /**/
                  this.Value = "";
                  InitializeComponent();
              }
      
              public String value
              {
                  get { return this.Value; }
              }
      
              private void OK_Click(object sender, EventArgs e)
              {
                  Value = true;
                  this.Dispose();
              }
      
              private void Cancel_Click(object sender, EventArgs e)
              {
                  Value = false;
                  this.Dispose();
              }
      
              public static String Ask()
              {
                  InputBox myInputBox = new InputBox();
                  myInputBox.AddName(" ");
                  myInputBox.ShowDialog();
                  return myInputBox.value;
              }
          }
      }
      


      Un exemple d'utilisation

      using InputBox;
      
      if(InputBox.InputBox.Ask())
      {
          //click sur ok
      }
      else
      {
          //click sur annuler
      }
      


      Et pour ce qui est des deux boutons

      this.OK.Location = new System.Drawing.Point(140, 0);
      this.OK.Name = "OK";
      this.OK.Size = new System.Drawing.Size(34, 23);
      this.OK.TabIndex = 1;
      this.OK.Text = "OK";
      this.OK.UseVisualStyleBackColor = true;
      this.OK.Click += new System.EventHandler(this.OK_Click);
      // 
      // Cancel
      // 
      this.Cancel.Location = new System.Drawing.Point(172, 0);
      this.Cancel.Name = "Cancel";
      this.Cancel.Size = new System.Drawing.Size(62, 23);
      this.Cancel.TabIndex = 2;
      this.Cancel.Text = "Cancel";
      this.Cancel.UseVisualStyleBackColor = true;
      this.Cancel.Click += new System.EventHandler(this.Cancel_Click);
      
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        3 juin 2011 à 22:45:32

        Mostuf, je vois pas comment ton truc peut marcher...le texte n'est pas défini dans la méthode Ask...
        En plus, tu te compliques la vie en utilisant une propriété à toi ; il te suffirait d'utiliser la propriété DialogResult de la classe Form dont tu hérites. (et puis tu ne suis pas les conventions de nommage .NET, et tu n'utilises pas la syntaxe courte pour les propriétés)
        • Partager sur Facebook
        • Partager sur Twitter
          3 juin 2011 à 22:55:15

          A vrai dire j'ai plusieurs constructeur pour la méthode Ask

          public static String Ask()
          {
              InputBox myInputBox = new InputBox();
              myInputBox.AddName(" ");
              myInputBox.ShowDialog();
              return myInputBox.value;
          }
          
          public static String Ask(String InputName)
          {
               InputBox myInputBox = new InputBox();
               myInputBox.AddName(InputName);
               myInputBox.ShowDialog();
               return myInputBox.value;
          }
          


          Et encore une dizaine après. avec des paramètre différent permettant d'obtenir des input box modifiable.

          Citation

          Il te suffirait d'utiliser la propriété DialogResult de la classe Form dont tu hérites



          Pour un simple Ok/annuler, oui c'est vrai que c'est mieux.

          Mais ma DLL avait un autre but à l'origine, c'était de créer un équivalent de MessageBox, mais avec la possibilité pour l'utilisateur de rentrer un texte.

          Si tu préfère, ce serait un équivalent du prompt en javascript.A ma connaissance inexistant en c#

          Citation

          et puis tu ne suis pas les conventions de nommage .NET, et tu n'utilises pas la syntaxe courte pour les propriétés



          C'est pas faux, à vrai dire j'ai commencé le c# un peu en autonomie, après avoir vu d'autre langage comme le c/c++ java php ... et j'ai pris la facheuse habitude d'utiliser mes propres conventions de nommage unique pour tout les langages. Mais j'ai bien l'intention de corriger ça à l'avenir.

          D'autre part, pourrait tu m'en dire plus sur "la syntaxe courte pour les propriétés", car j'ai toujours utilisé la syntaxe tel qu'elle est dans mon code ci dessus, en pensant qu'il fallait faire comme ça (cf les nombreux exemple sur msdn). Peut être par MP pour éviter de dévié du sujet.
          • Partager sur Facebook
          • Partager sur Twitter
            4 juin 2011 à 11:20:55

            Moi je trouve que ça

            var inter = from INTERVENTION i in context.INTERVENTION
                        where i.INTEID == int.Parse(((Button)sender).ToString())
                        select i;
            


            C'est louche. :-°
            • Partager sur Facebook
            • Partager sur Twitter
              4 juin 2011 à 13:57:20

              J'aurais pu simplement utiliser context.intervention etc mais c'est pas vraiment le but de mn topic vois-tu :/
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                4 juin 2011 à 14:15:21

                Il ne parle pas des conventions de nommage....
                Regarde mieux ce que ce code fait (fais comme si tu l'expliquais à quelqu'un d'autre, ça marche assez bien)
                • Partager sur Facebook
                • Partager sur Twitter
                  4 juin 2011 à 18:08:10

                  Heu je suis pas sur d'avoir compris la...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    4 juin 2011 à 19:51:56

                    int.Parse(((Button)sender).ToString())
                    

                    Tu essaies de convertir en int un Button converti en String.
                    Si tu veux associer à chaque Button un nombre, utilise la propriété Tag ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 juin 2011 à 12:24:55

                      Simple erreur du aux multiples test que j'ai fais ^^ le soucis est qe j'ai essayé plus simplement, sans requêtes mais le problème persiste. L'événement que j'associe au bouton (qui est donc dans la classe relative a la page et non au contrôle) ne de déclenche pas :/. Je commence a m'arracher les cheveux la xD
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Boite de dialogue pour validation

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown