Conseils pour bien construire mon formulaire d'affichage.

Signaler
Messages postés
140
Date d'inscription
samedi 5 mars 2011
Statut
Membre
Dernière intervention
13 août 2013
-
Messages postés
16
Date d'inscription
vendredi 13 décembre 2013
Statut
Membre
Dernière intervention
30 août 2014
-
Bonjour,
En tant que débutant je trouve mon code mal construit et j'aimerais avoir vos avis et critiques sachant que je réutiliserais ce principe pour faire un autre formulaire.
Ce formulaire est prévu pour afficher des messages depuis n'importe quel endroit du programme y compris depuis un Thread diffèrent, pour cela j'utilise la méthode Invoke (mais le problème ne se situe pas là). On peux afficher dans plusieurs RichtextBox organisés dans des Panels. On moment d'afficher il faut donc indiquer le Panel qui doit recevoir le message.
Quand je ferme le formulaire je dois retrouver les messages lors de la réouverture et les changements doivent s'afficher en temps réel sur le formulaire.
Je me pose les questions suivantes :
- Pensez vous que depuis mon programme principale je doit assigner une propriété à un objet intermédiaire qui me servirait à stoker les valeurs a afficher et les charger ensuite dans mon formulaire, ou bien je dois faire l'inverse : assigner une propriété directement sur le formulaire et ensuite stocker cette valeur dans mon objet à partir du formulaire ?

Comme ceci :
To_Display = "Mon Message à afficher"

MonInfos.CustomInfos = To_Display
' ou
frmInfo.TextCustomInfos = To_Display


- Je trouve bizard également le fait de déclarer des propriétés sur le formulaire. Pensez vous qu'il est préférable d'utiliser une classe et comment ?

Déclaration dans le module main :
Public MonInfos As frmInfos.Infos
Public frmInfo As New frmInfos


Code du formulaire frmInfos :
Public Class frmInfos
    Private _TextCustomInfos As String
    Private _TextMediaInfos As String
    Public Structure Infos
        Dim CustomInfos As String
        Dim MediaInfos As String
    End Structure
    Public Enum Panels
        CustomInfos
        MediaInfos
    End Enum
    Public Enum Modes
        Ajoute
        Remplace
    End Enum

     Private Sub frmInfos_Load(sender As Object, e As System.EventArgs) Handles Me.Load
             Call LoadData()
    End Sub
    Private Sub LoadData()
        Me.TextCustomInfos = MonInfos.CustomInfos
        Me.TextMediaInfos = MonInfos.MediaInfos
    End Sub
    Public Property TextCustomInfos As String
        Get
            Return _TextCustomInfos
        End Get
        Set(ByVal value As String)
            _TextCustomInfos = value
            Invoquer(_TextCustomInfos, Modes.Remplace, Panels.CustomInfos)
        End Set
    End Property
    Public Property TextMediaInfos As String
        Get
            Return _TextMediaInfos
        End Get
        Set(ByVal value As String)
            _TextMediaInfos = value
            Invoquer(_TextMediaInfos, Modes.Remplace, Panels.MediaInfos)
        End Set
    End Property

    Public Sub AppendText(ByVal Texte As String, ByVal Panel As Panels)

        Select Case Panel
            Case Panels.CustomInfos
                Invoquer(Texte, Modes.Ajoute, Panel)
           End Select
    End Sub

    Delegate Sub DelegateAffichage(ByVal Texte As String, ByVal Mode As Modes, ByVal Panel As Panels)
    Private Sub Invoquer(ByVal Texte As String, ByVal Mode As Modes, ByVal Panel As Panels)
        ' InvokeRequired compare l'ID du thread appelant à l'ID du thread qui a créé le controle. Si ces threads sont différent, renvoie true.
        If RichTextBox1.InvokeRequired Then
            Dim MyDelegate As New DelegateAffichage(AddressOf InvoqueAffiche) 
            RichTextBox1.Invoke(MyDelegate, Texte, Mode, Panel)
        Else
            InvoqueAffiche(Texte, Mode, Panel)
        End If
    End Sub

    Private Sub InvoqueAffiche(ByVal Texte As String, ByVal Mode As Modes, ByVal Panel As Panels)
        ' Affichage dans un ThreadSafe
        Select Case Panel
            Case Panels.CustomInfos
                If Mode = Modes.Remplace Then
                    _TextCustomInfos = Texte
                    RichTextBox1.Text = Texte
                ElseIf Mode = Modes.Ajoute Then
                    _TextCustomInfos += Texte
                    RichTextBox1.AppendText(Texte)
                End If
            Case Panels.MediaInfos
                If Mode = Modes.Remplace Then
                    _TextMediaInfos = Texte
                    RichTextBox2.Text = Texte
                ElseIf Mode = Modes.Ajoute Then
                    _TextMediaInfos += Texte
                    RichTextBox2.AppendText(Texte)
                End If
        End Select
    End Sub

End Class

5 réponses


Salut,

Une seule question par topic. La manière dont on stocke des données dépend de la quantité de ces dernières et de ce que l'on veut en faire. Seulement on ne sait encore rien.
Messages postés
140
Date d'inscription
samedi 5 mars 2011
Statut
Membre
Dernière intervention
13 août 2013

Bonsoir et merci pour la réponse.
La quantité de donnés à stocker se limite a environ 6 String, de quoi remplir 6 RichtextBox.

Ce que je veux en faire : A plusieurs endroit de mon code, je veux pouvoir afficher un message suivant les prescriptions citées plus haut.
- Si je stocke ce message dans une variable (intermediaire) objet ou autre, cela me permet de garder en mémoire la valeur même si je détruit l'instance de frmInfo (en fermant la fenêtre), mon texte ne sera pas perdu mais cela m'oblige à trouver une technique (peut-être avec un Timer mais j'aimerais éviter) pour rafraîchir le texte afffiché dans le formulaire dans le cas ou celui-ci serait amené a changer.
- Si j'écrit directement dans le formulaire à l'aide d'une propriété je n'ai pas les problèmes citées ci-dessus et il me suffit d'enregistrer ensuite les propriétés dans une variables ou objet Public pour conserver les valeurs en cas de fermeture du formulaire.

J'aimerais juste avoir des conseils de gens expérimentés pour m'orienté vers une bonne solution dès le départ car j'ai une autre feuille que celle-ci à développer sur le même principe qui risque d'être beaucoup plus compliqué et je manque un peu d'expérience en programmation orienté objet.

Vos avis et conseils sont les bienvenues.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

"Ce que je veux en faire : A plusieurs endroit de mon code, je veux pouvoir afficher un message suivant les prescriptions citées plus haut. "

pas compris
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Statut
Membre
Dernière intervention
13 août 2017
14
Bonjour BasicZx81.

La notion de "formulaire d'affichage" n'est pas encore normalisée, puisque c'est vous qui souhaiter la créer. La seule aide qui me vient à l'esprit est de vous en donner une définition claire, nette, et précise (avez vous reconnu le matheux ?). La voici :
"Formulaire ne contenant que des contrôles destinés à l'affichage de tout ce que vous voulez afficher, et en particulier ne contenant aucun code."
Pensez à ceci : tout contrôle d'un formulaire est public.
Cordialement.
Messages postés
16
Date d'inscription
vendredi 13 décembre 2013
Statut
Membre
Dernière intervention
30 août 2014

si tu as un textbox n' importe tu peux toujours le remplir avec
textbox.text=texteAvoir
si tu mets ça dans un sub
public sub remplir_textbox(mon_texte as string)
textbox1.text=mon_texte
c'est la facon la plus simple