Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre actif
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    octobre 2011
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2011
    Messages : 157
    Points : 154
    Points
    154

    Par défaut mono, gtk progressbar, timers, Threading

    Bonjour,

    J'ai un petit problème avec ma progress bar gtk, impossible de modifier sa valeur, un moment j'ai tout mis en static, mais ça fini par changer mes déclarations (et meme celles que je ne suis pas censé gérer moi même)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    using System;
    using Gtk;
    using System.Timers;
    using System.Threading;
     
    public partial class MainWindow: Gtk.Window
    {	
    	private static System.Timers.Timer TheTimer;
    	private static int i = 0;
     
    	public MainWindow (): base (Gtk.WindowType.Toplevel)
    	{
    		Build ();
     
    		//initialise un timer !
    		TheTimer = new System.Timers.Timer ();
    		TheTimer.Elapsed += new ElapsedEventHandler (modPbar);
    		TheTimer.Interval = 1000;
    		TheTimer.Enabled = true;
     
    	}
     
    	public static void modPbar (object source, ElapsedEventArgs e)
    	{
     
    		Console.WriteLine (i++);
    		setPbar (i); // ICI ça veut pas , il me dit qu'il ne connait pas setPbar.
     
    	}
     
    	protected void setPbar (int val)
    	{
    		int valcent = (val / 100);
    		progressbar1.Fraction = valcent; //si je déclarre setPbar en statique, c'est progressbar qu'il ne connait plus
    		progressbar1.Text = valcent.ToString ();
    	}
    }
    L'erreur est
    ligne 28: /home/vohu/code/csharp/mono/gtkpbar/test/MainWindow.cs(17,17): Error CS0120: An object reference is required to access non-static member `MainWindow.setPbar(int)' (CS0120) (test)

    merci pour votre aide :$

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juin 2005
    Messages
    684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : juin 2005
    Messages : 684
    Points : 446
    Points
    446

    Par défaut

    Bonsoir.

    Ton problème n'a rien à voir avec mono ou gtk.

    Comme ta méthode modPbar est statique, elle a besoin de savoir à quel objet elle s'adresse (vu qu'elle appartient à ta classe MainWindow, et non à un objet de type MainWindow).

    soit tu retire le mot static de la déclaration de modPbar, soit tu ajoute un argument MainWindow à ta methode modPbar

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    public static void modPbar (object source, MainWindow cible, ElapsedEventArgs e)
    	{
     
    		Console.WriteLine (i++);
                              if(cible != null)
    		     cible.setPbar (i);
     
    	}

  3. #3
    Membre actif
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    octobre 2011
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2011
    Messages : 157
    Points : 154
    Points
    154

    Par défaut

    J'ai enlevé static, et effectivement, ça fonctionne...

    J'aimerai quand même comprendre ton autre solution

    J'ai comme dans ton exemple modifié ma fonction modPbar pour ajouter un paramètre de type MainWindow, mais faut il modifier l'appel que j'ai en ligne 18 ?


    Aussi, avec la première solution, ma barre de progression n'est pas affichée (pourtant, la console montre bien que la valeur est envoyée..
    Je pense qu'il y a un problème de rafraichissement de l'affichage, en VB6 il y avait doevents, y a t'il quelque chose du même genre en c#*?

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •