Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Mono
Mono Forum d'entraide sur le développement avec Mono, l'implémentation open-source de la Common Language Infrastructure .
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/02/2012, 14h39   #1
vohufr
Nouveau Membre du Club
 
Homme
Administrateur systèmes et réseaux
Inscription : octobre 2011
Messages : 50
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 : 50
Points : 26
Points : 26
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
Citation:
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 :$
vohufr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2012, 18h42   #2
giova_fr
Membre éprouvé
 
Homme
Développeur .NET
Inscription : juin 2005
Messages : 674
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France

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

Informations forums :
Inscription : juin 2005
Messages : 674
Points : 451
Points : 451
Envoyer un message via ICQ à giova_fr
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);
 
	}
giova_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2012, 19h23   #3
vohufr
Nouveau Membre du Club
 
Homme
Administrateur systèmes et réseaux
Inscription : octobre 2011
Messages : 50
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 : 50
Points : 26
Points : 26
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#*?
vohufr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h44.


 
 
 
 
Partenaires

Hébergement Web