Conseils pour bien construire mon formulaire d'affichage.
BasicZx81
Messages postés140Date d'inscriptionsamedi 5 mars 2011StatutMembreDernière intervention13 août 2013
-
13 août 2013 à 18:49
copperncius
Messages postés16Date d'inscriptionvendredi 13 décembre 2013StatutMembreDernière intervention30 août 2014
-
14 déc. 2013 à 17:51
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
A voir également:
Conseils pour bien construire mon formulaire d'affichage.
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.
BasicZx81
Messages postés140Date d'inscriptionsamedi 5 mars 2011StatutMembreDernière intervention13 août 2013 13 août 2013 à 20:19
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.
Zermelo
Messages postés378Date d'inscriptionsamedi 22 septembre 2012StatutMembreDernière intervention13 août 201714 14 août 2013 à 08:55
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
copperncius
Messages postés16Date d'inscriptionvendredi 13 décembre 2013StatutMembreDernière intervention30 août 2014 14 déc. 2013 à 17:51
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