Texte tronqué dans un label.

FBVLV Messages postés 5 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 5 mars 2009 - 5 mars 2009 à 17:56
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 8 mars 2009 à 03:09
Bonjour,

Je souhaite afficher dans un label une description récupérée dans un fichier MonFichier.cfg ayant, en gros, cette forme :

[VinsDisponibles]
Entrée= Alsace
PlatPrincipal=Bougogne
Dessert=Champagne
Commentaires=L'adéquation du vin avec le plat est indispensable.

Je n'ai aucun problème pour récupérer la valeur "L'adéquation du vin avec le plat est indispensable."
Pour cela j'utilise les conseils donnée pour ouvrir un fichier ini.

Mais, à partir d'une certaine longueur, le Commentaire est tronqué dans le Label.

Pour être plus clair, si Commentaire = L'adéquation du vin, tout s'affiche sans problèmes,
mais lorsque Commentaire =L'adéquation du vin avec le plat est indispensable.
seul " l'adéquation du vin est in " s'affiche
 
Naturellement j'ai dimensioné mon label de façon à ce qu'il soit largement supérieur à la longueur de la valeur que je veux afficher.

Pour votre information j'ai exactement le même problème si je remplace le label par un TextBox.

Le problème ne viendrait-il pas alors de la manière d'aller chercher l'information dans le fichier .cfg ? Le buffer limité à 255 ?

A titre d'information voici les extraits du code que j'utilise :

Module ModuleLireEcrireIni
    Public Class Cls_Ini


Contenu du module


        'Declaration API pour lire le fichier ini
        Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
            (ByVal lpApplicationName As String, _
             ByVal lpKeyName As String, _
             ByVal lpDefault As String, _
             ByVal lpReturnedString As String, _
             ByVal nSize As Integer, _
             ByVal lpFileName As String) As Integer


        'Declaration API pour ecrire le fichier ini
        Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
            (ByVal lpApplicationName As String, _
             ByVal lpKeyName As String, _
             ByVal lpString As String, _
             ByVal lpFileName As String) As Integer




        'chemin du fichier INI
        Public Path As String




        'fonction qui retourne la chaine selon la '[SECTION]' et la 'CLE ='
        Public Function GetValue(ByVal sSection As String, ByVal sKey As String) As String
            'buffer
            Dim Buffer As New System.Text.StringBuilder(255)
            Buffer.Append(" ", 255)
            Dim sRet As String = Buffer.ToString
            Buffer.Length = 0


            'retour API
            Dim iRet As Integer = GetPrivateProfileString(sSection, sKey, "", sRet, sRet.Length, Me.Path)


            'retour fonction
            Return sRet.Substring(0, iRet)
        End Function


 


 



Pour afficher la valeur
      
        Dim Observations As String = ""
        
            Observations = (INI.GetValue("fltsim." & index, "Commentaires"))
            LabelVarianteDescription.Text = Commentaire 
          

Merci d'avance

7 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 mars 2009 à 19:44
salut,

1. change tes déclarations d'API pour passer directement le stringbuilder en paramètre, pas besoin de passer par une autre variable intermédiaire

2. la variable commentaire sort d'où?
LabelVarianteDescription.Text = <strike>Commentaire</strike> Observations

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
FBVLV Messages postés 5 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 5 mars 2009
5 mars 2009 à 21:41
Merci pour la rapidité de la réponse.

la variable commentaire était due à un manque d'attention de ma part.

Pour passer directement la stringbuider en paramètre, comment fais-je ?, je sui un tout petit débutant.

Merci d'avance;
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 mars 2009 à 00:42
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
            (ByVal lpApplicationName As String, _
             ByVal lpKeyName As String, _
             ByVal lpDefault As String, _
             ByVal lpReturnedString As System.Text.StringBuilder, _
             ByVal nSize As Integer, _
             ByVal lpFileName As String) As Integer
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
6 mars 2009 à 18:36
Bonjour,

Juste une question qui certainement stupide de ma part :) mais je la pose quand meme !
pourquoi utilise tu une class spécial pour lire un fichier INI ?

La class Streamreader ne suffirait il pas simplement, ? (pour la lecture)
et la class StreamWriter pour l'ecriture ?

voici un exemple auquel  je pense
_______________________________________
Imports System.IO
Public Class Form1

    Public Function ReadIni(ByVal val As String)
        Dim iniFile As New StreamReader("Monfichier.ini", System.Text.ASCIIEncoding.UTF7)

        Do Until iniFile.Peek = -1
            Dim v As String = iniFile.ReadLine
            If v.IndexOf(val) >= 0 Then
                Return v.Remove(0, val.Length + 1)
            End If
        Loop
    End Function
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Console.WriteLine(ReadIni("Commentaires"))

    End Sub
End Class
_____________________________________________

bien sur dans l'état actuel ça demande encore des améliorations puis ça sers a rien de me casser la tete si ça plais pas :) si ça plais je pourrais continué !

Cordialement,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 mars 2009 à 19:01
salut,

simplement parce que çà ne sert à rien

le fichier ini est "INI" parce qu'il correspond à une structure, et a des API faites pour

la seule raison de refaire l'accès aux données d'un INI (refaire la roue) serait de combler des lacunes qu'ont ces API

or ces API n'en ont aucune!

INI en a oui (par exemple pas d'enregistrement de caractère <chr(32)), mais dans ce cas on choisi un autre type de structure, pas d'accès

(pour cet exemple on pourrait préférer du xml, alors on refait dom? pas besoin non plus ... )

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
6 mars 2009 à 19:32
Salut,

j'aime bien la contradiction que tu te fais toi même :)
or ces API n'en ont aucune = INI en a oui (donc elles n'ont aucune lacune )
je pense le contraire, les API on beaucoup de lacune et beaucoup de défaut effectivement certaine n'ont on pas !
je pense néanmoins a l'outil de développent Visual Studio, si les API étais aussi parfaite que tu le dis on travaillerais encore avec VB6 ...

Effectivement en .net il est recommander de travailler avec du XML et d'oublier l'INI, de plus Microsoft le dis clairement ...

Enfin bon je donne juste un avis sur le fil et je cherche pas a me prendre la tête ...

Cordialement,
Troxsa 
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 mars 2009 à 03:09
pas de problème, mais mon message ne faisait pas de comparaison entre vb6 et vb.net

la STRUCTURE du fichier ini est faite d'une manière (sur certains points discutable)
son CONTENU est accessible par des API, sans erreur ni équivoque, donc aucune raison de de pas utiliser ces api

aucune contradiction, aucun rapport au langage utilisant le fichier final

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
Rejoignez-nous