Texte tronqué dans un label.

Signaler
Messages postés
5
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
5 mars 2009
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
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 
Messages postés
5
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
5 mars 2009

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;
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
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
Messages postés
553
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
2 octobre 2016
1
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,
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
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 
Messages postés
553
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
2 octobre 2016
1
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 
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
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