IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Utilisation d'un curseur personnalisé


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut Utilisation d'un curseur personnalisé
    Bonjour,

    J'ai besoin d'un curseur spécifique dans une application.
    J'ai donc créé un fichier "Releve.cur". Jusque là tout va bien.

    J'ai ensuite cherché à l'incorporer dans les ressources (Visual Studio Community 2015) .
    Premier problème : Dans les propriétés du projet, section Ressources, on trouve à ajouter des images, des icônes, des fichiers textes, des chaines, de l'audio... mais pas de curseur.
    J'ai donc opté pour le type "Autre", puis cliqué sur "Fichier existant". Le fichier s'affiche dans la liste des ressources, mais sous la forme d'un type indéterminé (pas d'icône représentant le curseur). Bon, c'est peut-être normal.

    Le problème vient ensuite pour utiliser ce curseur.
    Après maintes recherches sur le web, je n'ai trouvé aucune méthode qui fonctionne.
    L’écueil se place au niveau de la création de l'objet curseur.

    1er essai : la solution Microsoft :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Cursor = new Cursor(GetType(), "Releve");
    Résultat : le compilateur souligne GetType() en rouge et annonce :
    "Erreur : Un initialiseur de champ ne peut pas faire référence au champ, à la méthode ou à la propriété non statique"

    Après réflexion, j'ai ajouté "this." devant GetType. Plus d'alarme compilateur, mais lorsque j'exécute le code, j'ai l’exception : "La référence d'objet n'est pas définie à une instance d'un objet.",.

    2ème essai : code trouvé sur ce forum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curReleve = new Cursor(Properties.Resources.ResourceManager.GetStream("Releve"));
    Cette fois j'ai une exception : "La ressource 'Releve' n'était pas un Stream - appel GetObject à la place".
    Le fait de rajouter ".cur" à Releve provoque le problème de référence non définie.

    J'ai donc remplacé GetStream par GetObjet. Là, le compilateur dit :
    "Erreur : Argument 1 : conversion impossible de 'object' en 'System.IntPtr'".

    J'avoue être sec.
    Dans l'arborescence des ressources, mon curseur est vu comme byte[].
    J'ai fait l'essai avec un des curseurs originaux de Windows. Même résultat.
    Je pense que le problème est que ma version de VS ne connait pas les curseur (???) puisque ce type ne figure pas dans la liste des ressources à incorporer.
    Pour des raisons de de publication, je ne souhaite pas publier le curseur comme un fichier externe.
    Quelqu'un saurait-il m'aider ?
    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    T'as jeté un coup d'œil sur la documentation MSDN ? Parce que bon si je compare ta première solution "Microsoft" je vois déjà que c'est pas pareil.

  3. #3
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    Le code de la "Solution Microsoft" est EXACTEMENT celui donné dans le lien (voir la dernière ligne de code).
    Et comme expliqué plus haut, ce code ne fonctionne pas.

    Dans la page citée, le curseur est intégré avec un instruction csc, qui est un instruction de compilation en ligne.
    Moi j'utilise Visual Studio, et comme expliqué j'ai intégré le curseur avec le gestionnaire de ressources.

    Une autre suggestion (testée) ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 025
    Points : 5 462
    Points
    5 462
    Par défaut
    Tu peux mettre plus de code?
    Est-ce que tu es bien dans une méthode non static pour faire cette affectation?

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Effectivement j'ai comparé avec la version VB...

    A mon avis le problème c'est la façon dont tu accèdes à ta ressource qui pose problème (surtout si t'as aucun problème en mettant un chemin de fichier complet). Comme je sais que le C# diffère légèrement du VB pour ce genre de bricole, je vais m'abstenir de dire plus de connerie et me contenterait de poster le 1er lien qu'une recherche Google renvoie sur le sujet pour relancer tes recherches.

    https://stackoverflow.com/questions/...-resource-file

  6. #6
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par micka132 Voir le message
    Tu peux mettre plus de code?
    Plus de code, c'est délicat...
    En fait, il y a très peu de code : dans la classe de la feuille, évènement Click d'un bouton, je voudrais affecter mon curseur personnalisé à l'un des contrôles (un datagridview en l'occurence).
    Et justement, je ne sais pas quoi mettre comme code... Ce que j'ai tenté ne fonctionne pas, comme dit plus haut.
    En attendant une solution, j'ai mis la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mnuListeEditReconciliation.Checked = !mnuListeEditReconciliation.Checked;
    dgvListe.Cursor = mnuListeEditReconciliation.Checked ? Cursors.Hand : Cursors.Default;
    mais j'aimerais bien remplacer le curseur "Hand" par le mien.

    En fait, il semblerait que je n'arrive pas à intégrer le fichier de curseur dans les ressources du formulaire.
    Lorsque j'essaie de modifier le fichier de ressources du formulaire (.rsx), il n'y a pas de type "curseur". J'ai essayé avec "Fichier", mais je me fais violemment jeter par VS qui me dit que cela va corrompre le fichier de ressources du formulaire.
    Le fichier de curseur apparaît dans l'explorateur de solutions sous la rubrique "Resources". J'ai essayé de le tirer dans le fichier de ressources de la feuille, avec la même insulte.
    Par ailleurs, dans la liste de la propriété "Curseur" du datagridview, il n'y a pas mon curseur, ni même "Custom" comme dans VB6.

    Quelle est la méthode pour intégrer un curseur personnalisé dans un projet ??? (sans joindre le fichier séparé dans le package d'installation, mais intégré à l'exécutable).

    Citation Envoyé par micka132 Voir le message
    Est-ce que tu es bien dans une méthode non static pour faire cette affectation?
    Étant dans une classe de formulaire, ce n'est évidemment pas une classe statique, d'autant que le formulaire est une feuille fille MDI, instanciée à autant d'exemplaires que le souhaite l'utilisateur.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/09/2007, 22h19
  2. Utilisation d'un curseur en for update.
    Par macben dans le forum SQL
    Réponses: 4
    Dernier message: 30/08/2007, 08h53
  3. utilisation d'un curseur pour un insert
    Par caballero dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/06/2007, 09h21
  4. [C#][Cursor] Définir un curseur personnalisé pour un contrôle
    Par nicolas.pied dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/03/2007, 03h16
  5. Ajouter un curseur personnalisé à un Control Panel
    Par nkd dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/10/2005, 23h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo