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

VB.NET Discussion :

Surcharger la méthode ToString du type Boolean


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut Surcharger la méthode ToString du type Boolean
    Hello,

    Tout est dans le titre. Dans une application, je voudrais surcharger cette méthode pour que je puisse montrer à l'utilisateur (via un datagridview) la valeur d'une variable de type Boolean via la méthode ToString.

    Il est évident que l'utilisateur ne va pas comprendre True et False.

    Certains me diront d'utiliser des cellules checkbox pour afficher ces valeurs mais mes users sont neuneus et veulent toujours cliquer sur ces cases pour tenter de modifier ces valeurs (et d'autres ne comprennent carrément pas que quand c'est coché, ça veut dire oui... )

    Vu que le datagridview utiliser la méthode ToString des objets contenus dans ses colonnes pour afficher les valeurs, je souhaite donc surcharger la méthode ToString de Boolean pour afficher Oui et Non.

    Si je sais comment surcharger une méthode d'une classe perso, aucune idée de comment faire sur une classe existante... :-/

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Pour surcharger, tu dois créer un type dérivé de Boolean. Sinon, il y a d'autres solutions :
    1. Créer une méthode d'extension spécifique qui retournera oui/non
    2. Créer un formatter spécifique (et l'utiliser en intervenant au moment du binding/création de la ligne)
    3. Utiliser les deux conjointement

    Pour l'option n°2, voici un exemple de code :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Public Class CustomBooleanFormatter
    	Implements IFormatProvider
    	Implements ICustomFormatter
     
    	Public Function Format(format__1 As String, arg As Object, formatProvider As IFormatProvider) As String
    		Dim value = CBool(arg)
    		format__1 = (If(format__1 IsNot Nothing, format__1.Trim().ToLower(), Nothing))
     
    		Select Case format__1
    			Case "on"
    				Return If(value, "Oui", "Non")
    			Case Else
    				If TypeOf arg Is IFormattable Then
    					Return DirectCast(arg, IFormattable).ToString(format__1, formatProvider)
    				Else
    					Return arg.ToString()
    				End If
    		End Select
    	End Function
     
    	Public Function GetFormat(formatType As Type) As Object
    		If formatType = GetType(ICustomFormatter) Then
    			Return Me
    		Else
    			Return Nothing
    		End If
    	End Function
    End Class
    Pour l'utiliser :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ouinon = String.Format(New CustomBooleanFormatter(), "TRUE: {0:ON} ; FALSE: {1:ON}", True, False)
    Pour utiliser la méthode d'extension avec le custom formatter, voici le code de la méthode d'extension :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public NotInheritable Class CustomExtensions
     
    	Private Sub New()
    	End Sub
     
    	<System.Runtime.CompilerServices.Extension> _
    	Public Shared Overloads Function ToString(value As Boolean, format As String) As String
    		Return String.Format(New CustomBooleanFormatter(), "{0:" & format & "}", value)
    	End Function
    End Class
    Et pour l'utiliser :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oui = True.ToString("ON")
    Dim non = False.ToString("ON")
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ah bah put***, jamais je n'aurais pondu un truc pareil par moi-même.

    Y a tellement de nouveaux trucs pour moi que je pige pas tout . Du coup, si ce n'est pas trop demandé (et si t'as le temps), tu pourrais un peu détailler ?

    C'est possible de passer un paramètre en plus pour dire dans quelle langue je veux ce Oui/Non ? XD

    Petite paranthèse mais toujours liée à l'affichage dans un datagridview :
    Pour les types par références (disons le type Date), que se passe-t-il si j'ai une classe avec une propriété de type Data valant Nothing et que je l'affiche dans un datagridview ?
    1. Vais-je me ramasser une NullReferenceException ?
    2. Est-ce que le dgv est assez malin pour savoir qu'il ne doit pas appeler ToString sur un objet qui n'existe pas ?
    3. Affiche-t-il une chaîne vide ?
    4. Affiche-t-il un texte (autre qu'une chaîne vide) indiquant que l'objet n'existe pas ?


    Dans l'hypothèse 4, il est évident que le texte ne doit pas être vu par l'utilisateur... Serait-il possible de surcharger ce texte ? Vu que l'objet n'existe pas, ce n'est pas la méthode Date.ToString qu'il faut surcharger. Mais quoi alors ?

    P.S. : Je dois avoir un don pour penser à toutes ces questions tordues

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Par défaut le DGV ne va rien afficher dans le cas où il y a une valeur NULL.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Sauf qu'en fait, quand on met un type date (ou datetime) à nothing, il y a 01/01/0001 00:00:00.0000 (enfin qqch du genre XD)

    Du coup bah... j'ai fait un wrapper en linq. Pareil pour mon problème de text de booléén. En plus ça m'a permis de faire découvrir les types anonymes à mon collègue.

    Désolé pour le dérangement .

    N'empêche, je vais quand même creuser ces méthodes d'extension. Ca a l'air intéressant.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    il y a aussi beaucoup plus simple, l'event CellFormating du dgv, qui permet de modifier ce qui va être affiché en 2 lignes de code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] Surcharge de méthode
    Par ouioui2000 dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2006, 15h25
  2. [Custom Tags] Problème avec une surcharge de méthode
    Par Strab dans le forum Taglibs
    Réponses: 19
    Dernier message: 26/08/2005, 16h34
  3. Type boolean MIN_VALUE || MAX_VALUE
    Par bxflash dans le forum Langage
    Réponses: 5
    Dernier message: 23/08/2005, 13h52
  4. [débutant] type boolean!!!
    Par just1980 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/08/2005, 10h47
  5. Comment surcharger la méthode OnClose d'un TFrame ?
    Par sdebrois dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/01/2005, 20h57

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