Recharger une form

Résolu
djmic Messages postés 70 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 9 juillet 2010 - 22 avril 2010 à 11:27
djmic Messages postés 70 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 9 juillet 2010 - 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

6 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
23 avril 2010 à 00:42
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!
3
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
26 avril 2010 à 11:32
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!
3
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
22 avril 2010 à 19:02
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!
0
djmic Messages postés 70 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 9 juillet 2010
22 avril 2010 à 21:59
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
djmic Messages postés 70 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 9 juillet 2010
25 avril 2010 à 21:46
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
0
djmic Messages postés 70 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 9 juillet 2010
27 avril 2010 à 21:02
Merci c'est impeccable, c'est exactement ce que je voulais.
0
Rejoignez-nous