Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2011
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2011
    Messages : 110
    Points : 112
    Points
    112

    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
    677
    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 : 677
    Points : 457
    Points
    457

    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 habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2011
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2011
    Messages : 110
    Points : 112
    Points
    112

    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
  •