Recharger une form [Résolu]

djmic 70 Messages postés mardi 25 mars 2008Date d'inscription 9 juillet 2010 Dernière intervention - 22 avril 2010 à 11:27 - Dernière réponse : djmic 70 Messages postés mardi 25 mars 2008Date d'inscription 9 juillet 2010 Dernière intervention
- 27 avril 2010 à 21:02
Bonjour à tous,

je voulais savoir s'il était possible de recharger une form? (comme on peut le faire avec une page asp, si je ne dis pas de bêtise).

En fait, je crée une application pour gérer un bar ainsi que le comptes associés.
Le truc est que je travail avec des mdi, et le soucis et que si dans une form je rajoute du stock, les changements ne se répercutent pas sur les autres form qui vont avoir accès à ce "stock".
L'utilisateur sera alors obligé de fermer la form et de la réouvrir pour que les changements dans le stock soit visible.

Existe-t-il une astuce pour concevoir cela?

Merci
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 23 avril 2010 à 00:42
3
Merci
Bonsoir,
en effet!!

ne connaissant pas ton code, voici quelques idées:

tout d'abord on declare, dans le Program principal, un evenment et une methode qui va le lancer, l'ensemble public et static, permettant d'être utilisé par toutes les "form" du programme.

static class Program
{
    // structure de données simulant une base partagée
    public static DataStruct Data = new DataStruct();

    // Signature de l'evenement de m.à.j
    public delegate void MajEventDelegate(Form sender);
    // evenement de m.à.j
    public static event MajEventDelegate MajEvent;
    //methode de lancement de l'evenement accessible de l'exterieur
    public static void RaiseMajEvent(Form sender)
    {
       if (MajEvent!=null)
           MajEvent(sender);
    }


il faut ensuite structurer un peu ton code, par exemple dans chaque "form" avoir une methode d'affichage qui met à jour les valeurs affichées en provenance de la base et une methode qui met à jour les données partagées (base de données) puis genere l'evenement de mise à jour


//Methode de mise à jour des données affichées sur la form
private void MajForm()
{
    labelDateMaj.Text = Program.Data.DateMaj.ToString();
    textBox1.Text = Program.Data.Text;
}

//Methode de mise à jour des données du referentiel
private void MajData()
{
    Program.Data.Text =textBox1.Text ;
    //Lancement de l'evenement de màj
    Program.RaiseMajEvent(this);
}


Dans l'initialisation de chaque "form" ajouter un abonnement à l'évenement avant d'appeler la methode d'affichage; à la reception de l'evenement il suffit d'appeler la méthode d'affichage.
ex
// initialisation d'une form fille
public Form1()
{
    InitializeComponent();
    
    //Abonement à l'évenement de MAJ
    Program.MajEvent += new Program.MajEventDelegate(Program_MajEvent);

    // mettre à jour les données affichées sur la form
    MajForm();
}
//Reception de l'evenement de mise à jour
void Program_MajEvent(Form sender)
{
    //une modification à eu lieu, rafraichir les données affichées
    MajForm();
}


bon maintenant, chaque fois qu'une donnée change dans la "form" il suffit d'appeler la methode de mise à jour MajData();

Dans l'exemple j'ai des "form" avec un label qui affiche l'heure de la dernier mise à jour, un textbox qui affiche une donnée qui peut être modifiée, et une structure de données partagée tel que:
//exemple de referentiel de données
public class DataStruct
{
    private string _text = "";
    private DateTime _datemaj=DateTime.Now;
    public string Text
    {
        get { return _text; }
        set
        {
            _text = value;
            _datemaj = DateTime.Now;
        }
    }
    public DateTime DateMaj
    {
        get { return _datemaj; }
    }
};


Voilà, Si je n'ai pas été assez clair, n'hésites-pas.
Bon code

C# is amazing, enjoy it!

Merci cs_Robert33 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_Robert33
Meilleure réponse
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 26 avril 2010 à 11:32
3
Merci
Bonjour

Un délégué peut avoir plusieurs fonctions.
c'est en fait l'équivalent pointeur de fonction C++, qui permet de faire executer du code par quelqu'un d'autre (délegation), typiquement lors de l'execution d'un evenement. Mais on peut envisager qu'il soit appelé directement.

Et oui tu as bien compris le principe.
Les formulaires fils vont generer l'evenement lorsqu'ils vont modifier les données, et comme ils sont tous abonnés à l'evenement ils vont tous le recevoir.
donc le formulaire qui a émis l'evenement va également le recevoir , si tu ne veux pas traiter les evenements qu'un formulaire a lui-même emis, ajoute le test suivant:
//Reception de l'evenement de mise à jour
void Program_MajEvent(Form sender)
{
    //inutile de traiter les evenements emis par moi-même ;-)
    if (sender == this)
      return;
    //une modification à eu lieu, rafraichir les données affichées
    MajForm();
}



C# is amazing, enjoy it!

Merci cs_Robert33 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_Robert33
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 22 avril 2010 à 19:02
0
Merci
Bonjour

le plus simple, et le plus élégant, c'est de generer un evenement lorsque tu modifies des données, et dans chaque autre form, lorsque cet évenement est generé tu refraichis tes données.


C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
djmic 70 Messages postés mardi 25 mars 2008Date d'inscription 9 juillet 2010 Dernière intervention - 22 avril 2010 à 21:59
0
Merci
Bonjour,

Merci pour le temps que vous me consacrez.
Bon je comprend le principe, mais comment mettre cela en place?
Il faut bien associer un évènement à une action ?!

merci
Commenter la réponse de djmic
djmic 70 Messages postés mardi 25 mars 2008Date d'inscription 9 juillet 2010 Dernière intervention - 25 avril 2010 à 21:46
0
Merci
Pourrais-tu me donner plus de détails sur le délégué, car je n'ai jamais trop compris ce qu'étaient les délégués et à quoi il servaient.

Par contre pour la solution je crois avoir compris. On va en fait créer un évènement que n'importe quelle formulaire fille va recevoir est traiter selon les besoins?

Merci à toi
Commenter la réponse de djmic
djmic 70 Messages postés mardi 25 mars 2008Date d'inscription 9 juillet 2010 Dernière intervention - 27 avril 2010 à 21:02
0
Merci
Merci c'est impeccable, c'est exactement ce que je voulais.
Commenter la réponse de djmic

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.