Bonjour,
J'ai un progamme vb.net dans lequel l'utilisateur a la possibilité de
choisir sa Font pour l'impression d'un texte, je voudrais que mon programme
puisse stocker cette information dans un fichier texte de manière à ce que
cette Font puisse être automatiquement récupérée lors d'une prochaine
utilisation du programme.
Pour stocker cette info, je pense l'enregistrer dans un fichier texte.
Le problème est que je ne sais pas comment faire pour stocker le type Font
dans un fichier texte.
Voici mon code qui me permet de sélectionner ma Font
If FontDialog1.ShowDialog() = DialogResult.OK Then
DestinataireEnveloppe1Font.Font = FontDialog1.Font
Dim Ft = New Font(DestinataireEnveloppe1Font.Font, 60)
End If
et maintenant voici ma ligne de code concernant l'écriture dans mon fichier,
et c'est là que ça plante à cause que je veux mettre un type font dans un
type string
PrintLine(2, Ft)
Il doit falloir utiliser une fonction ou une méthode qui permette la
conversion, mais comme je suis encore débutant, je ne vois pas.
Si quelqu'un peut m'aider, merci d'avance,
Bonjour,
J'ai un progamme vb.net dans lequel l'utilisateur a la possibilité de
choisir sa Font pour l'impression d'un texte, je voudrais que mon programme
puisse stocker cette information dans un fichier texte de manière à ce que
cette Font puisse être automatiquement récupérée lors d'une prochaine
utilisation du programme.
Pour stocker cette info, je pense l'enregistrer dans un fichier texte.
Le problème est que je ne sais pas comment faire pour stocker le type Font
dans un fichier texte.
Voici mon code qui me permet de sélectionner ma Font
If FontDialog1.ShowDialog() = DialogResult.OK Then
DestinataireEnveloppe1Font.Font = FontDialog1.Font
Dim Ft = New Font(DestinataireEnveloppe1Font.Font, 60)
End If
et maintenant voici ma ligne de code concernant l'écriture dans mon fichier,
et c'est là que ça plante à cause que je veux mettre un type font dans un
type string
PrintLine(2, Ft)
Il doit falloir utiliser une fonction ou une méthode qui permette la
conversion, mais comme je suis encore débutant, je ne vois pas.
Si quelqu'un peut m'aider, merci d'avance,
Bonjour,
J'ai un progamme vb.net dans lequel l'utilisateur a la possibilité de
choisir sa Font pour l'impression d'un texte, je voudrais que mon programme
puisse stocker cette information dans un fichier texte de manière à ce que
cette Font puisse être automatiquement récupérée lors d'une prochaine
utilisation du programme.
Pour stocker cette info, je pense l'enregistrer dans un fichier texte.
Le problème est que je ne sais pas comment faire pour stocker le type Font
dans un fichier texte.
Voici mon code qui me permet de sélectionner ma Font
If FontDialog1.ShowDialog() = DialogResult.OK Then
DestinataireEnveloppe1Font.Font = FontDialog1.Font
Dim Ft = New Font(DestinataireEnveloppe1Font.Font, 60)
End If
et maintenant voici ma ligne de code concernant l'écriture dans mon fichier,
et c'est là que ça plante à cause que je veux mettre un type font dans un
type string
PrintLine(2, Ft)
Il doit falloir utiliser une fonction ou une méthode qui permette la
conversion, mais comme je suis encore débutant, je ne vois pas.
Si quelqu'un peut m'aider, merci d'avance,
Le Thu, 19 May 2005 14:07:56 -0700, Jean-Michel a écrit :Bonjour,
J'ai un progamme vb.net dans lequel l'utilisateur a la possibilité de
choisir sa Font pour l'impression d'un texte, je voudrais que mon programme
puisse stocker cette information dans un fichier texte de manière à ce que
cette Font puisse être automatiquement récupérée lors d'une prochaine
utilisation du programme.
Pour stocker cette info, je pense l'enregistrer dans un fichier texte.
Le problème est que je ne sais pas comment faire pour stocker le type Font
dans un fichier texte.
Voici mon code qui me permet de sélectionner ma Font
If FontDialog1.ShowDialog() = DialogResult.OK Then
DestinataireEnveloppe1Font.Font = FontDialog1.Font
Dim Ft = New Font(DestinataireEnveloppe1Font.Font, 60)
End If
et maintenant voici ma ligne de code concernant l'écriture dans mon fichier,
et c'est là que ça plante à cause que je veux mettre un type font dans un
type string
PrintLine(2, Ft)
Il doit falloir utiliser une fonction ou une méthode qui permette la
conversion, mais comme je suis encore débutant, je ne vois pas.
Si quelqu'un peut m'aider, merci d'avance,
Utilise les typeconverter:
'POUR CONVERTIR EN STRING
Dim value As String
'On récupère le typeconverter de l'objet (ici une FONT)
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(MAFONT.GetType)
If converter.CanConvertTo(GetType(String)) Then
value = converter.ConvertToInvariantString(objVal)
End If
'ET INVERSEMENT POUR CONVERTIR A PARTIR D'UN STRING
Dim value As Font
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(GetType(FONT))
If converter.CanConvertFrom(MaVarSTRING) Then
value = converter.ConvertFromInvariantString(MaVarSTRING)
End If
Le Thu, 19 May 2005 14:07:56 -0700, Jean-Michel a écrit :
Bonjour,
J'ai un progamme vb.net dans lequel l'utilisateur a la possibilité de
choisir sa Font pour l'impression d'un texte, je voudrais que mon programme
puisse stocker cette information dans un fichier texte de manière à ce que
cette Font puisse être automatiquement récupérée lors d'une prochaine
utilisation du programme.
Pour stocker cette info, je pense l'enregistrer dans un fichier texte.
Le problème est que je ne sais pas comment faire pour stocker le type Font
dans un fichier texte.
Voici mon code qui me permet de sélectionner ma Font
If FontDialog1.ShowDialog() = DialogResult.OK Then
DestinataireEnveloppe1Font.Font = FontDialog1.Font
Dim Ft = New Font(DestinataireEnveloppe1Font.Font, 60)
End If
et maintenant voici ma ligne de code concernant l'écriture dans mon fichier,
et c'est là que ça plante à cause que je veux mettre un type font dans un
type string
PrintLine(2, Ft)
Il doit falloir utiliser une fonction ou une méthode qui permette la
conversion, mais comme je suis encore débutant, je ne vois pas.
Si quelqu'un peut m'aider, merci d'avance,
Utilise les typeconverter:
'POUR CONVERTIR EN STRING
Dim value As String
'On récupère le typeconverter de l'objet (ici une FONT)
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(MAFONT.GetType)
If converter.CanConvertTo(GetType(String)) Then
value = converter.ConvertToInvariantString(objVal)
End If
'ET INVERSEMENT POUR CONVERTIR A PARTIR D'UN STRING
Dim value As Font
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(GetType(FONT))
If converter.CanConvertFrom(MaVarSTRING) Then
value = converter.ConvertFromInvariantString(MaVarSTRING)
End If
Le Thu, 19 May 2005 14:07:56 -0700, Jean-Michel a écrit :Bonjour,
J'ai un progamme vb.net dans lequel l'utilisateur a la possibilité de
choisir sa Font pour l'impression d'un texte, je voudrais que mon programme
puisse stocker cette information dans un fichier texte de manière à ce que
cette Font puisse être automatiquement récupérée lors d'une prochaine
utilisation du programme.
Pour stocker cette info, je pense l'enregistrer dans un fichier texte.
Le problème est que je ne sais pas comment faire pour stocker le type Font
dans un fichier texte.
Voici mon code qui me permet de sélectionner ma Font
If FontDialog1.ShowDialog() = DialogResult.OK Then
DestinataireEnveloppe1Font.Font = FontDialog1.Font
Dim Ft = New Font(DestinataireEnveloppe1Font.Font, 60)
End If
et maintenant voici ma ligne de code concernant l'écriture dans mon fichier,
et c'est là que ça plante à cause que je veux mettre un type font dans un
type string
PrintLine(2, Ft)
Il doit falloir utiliser une fonction ou une méthode qui permette la
conversion, mais comme je suis encore débutant, je ne vois pas.
Si quelqu'un peut m'aider, merci d'avance,
Utilise les typeconverter:
'POUR CONVERTIR EN STRING
Dim value As String
'On récupère le typeconverter de l'objet (ici une FONT)
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(MAFONT.GetType)
If converter.CanConvertTo(GetType(String)) Then
value = converter.ConvertToInvariantString(objVal)
End If
'ET INVERSEMENT POUR CONVERTIR A PARTIR D'UN STRING
Dim value As Font
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(GetType(FONT))
If converter.CanConvertFrom(MaVarSTRING) Then
value = converter.ConvertFromInvariantString(MaVarSTRING)
End If
Salut Jean-Michel ! :O)
Tu peux employer la sérialization pour parvenir à ton but car la classe Font
possède l'attribut <Serializable>.
Je t'ai fais un exemple qui sérialize le Font d'un Label. (attention aux
longues lignes et désolé pour celles-ci)
Voici la démarche à suivre pour bien exécuter le test :
1. Démarre toi un nouveau projet "Application Windows" et remplace *tout* le
code contenu dans Form1 par celui ci-dessous.
2. Ouvre le formulaire en mode d'édition graphique.
3. Dans la boite à outils, clique sur la section "Général"
4. Clique-droit *dans* cette section et sélectionne l'item de menu nommé
"Ajouter/Supprimer des éléments...".
5. Dans l'onglet "Composants .NET Framework", sélectionne le composant nommé
"Property Grid".
6. Clique sur "Ok".
7. Lance l'exécution du projet.
8. Modifie le Font du label comme tu le souhaites dans la fenêtre de
propriété, le label en dessous de la fenêtre de propriété te donne un
apperçu du Font sélectionné.
10. Ferme la fenêtre.
11. Redémarre le projet, et la Font sera comme elle était lorsque tu as
fermé la fenêtre la fois d'avant.
Voici le code :
'***
Option Explicit On
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters
Imports System.Runtime.Serialization.Formatters.Binary
Public Class Form1
Inherits System.Windows.Forms.Form
Const FILE_NAME As String = "my_font.txt"
Private m_sFilePath As String
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel
InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste des
composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur Windows
Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents pgFont As System.Windows.Forms.PropertyGrid
Friend WithEvents lblDemoFont As System.Windows.Forms.Label
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.pgFont = New System.Windows.Forms.PropertyGrid
Me.lblDemoFont = New System.Windows.Forms.Label
Me.SuspendLayout()
'
'pgFont
'
Me.pgFont.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)
Me.pgFont.CommandsVisibleIfAvailable = True
Me.pgFont.LargeButtons = False
Me.pgFont.LineColor = System.Drawing.SystemColors.ScrollBar
Me.pgFont.Location = New System.Drawing.Point(8, 8)
Me.pgFont.Name = "pgFont"
Me.pgFont.Size = New System.Drawing.Size(352, 272)
Me.pgFont.TabIndex = 3
Me.pgFont.Text = "Propriété du Font"
Me.pgFont.ViewBackColor = System.Drawing.SystemColors.Window
Me.pgFont.ViewForeColor = System.Drawing.SystemColors.WindowText
'
'lblDemoFont
'
Me.lblDemoFont.Anchor > CType(((System.Windows.Forms.AnchorStyles.Bottom Or
System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)
Me.lblDemoFont.Location = New System.Drawing.Point(8, 288)
Me.lblDemoFont.Name = "lblDemoFont"
Me.lblDemoFont.Size = New System.Drawing.Size(352, 104)
Me.lblDemoFont.TabIndex = 4
Me.lblDemoFont.Text = "Label1"
Me.lblDemoFont.TextAlign > System.Drawing.ContentAlignment.MiddleCenter
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(368, 398)
Me.Controls.Add(Me.lblDemoFont)
Me.Controls.Add(Me.pgFont)
Me.Name = "Form1"
Me.Text = "Démo de sérialisation"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' on créer le nom du fichier employé pour stocker le Font
m_sFilePath = Application.StartupPath() & "" & FILE_NAME
' on relit le Font du fichier s'il existe
Dim fnt As Font = DeserializeFont()
If (Not fnt Is Nothing) Then
lblDemoFont.Font = fnt
End If
' on assigne le Label au property Grid
pgFont.SelectedObject = lblDemoFont
End Sub
Private Function DeserializeFont() As Font
Dim fnt As Font
' vérifie si le fichier existe
' si oui, on retourne le Font contenu dedans
' si non, on renvoit Nothing
If (File.Exists(m_sFilePath)) Then
Dim fs As FileStream
Dim bf As BinaryFormatter
fs = New FileStream(m_sFilePath, FileMode.Open, FileAccess.Read,
FileShare.None)
' on vérifie si le fichier n'est pas vide
If (fs.Length > 0) Then
bf = New BinaryFormatter
fnt = DirectCast(bf.Deserialize(DirectCast(fs, Stream)),
Font)
fs.Close()
End If
End If
Return fnt
End Function
Private Sub SerializeFont(ByVal fnt As Font)
Dim fs As FileStream
Dim bf As BinaryFormatter
' on créer le fichier et stocke le Font dedans
fs = New FileStream(m_sFilePath, FileMode.Create, FileAccess.Write,
FileShare.None)
bf = New BinaryFormatter
bf.Serialize(DirectCast(fs, Stream), fnt)
fs.Close()
End Sub
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Closed
' on sérialise le Font
SerializeFont(lblDemoFont.Font)
End Sub
End Class
'***
Pour en connaitre plus sur le sujet, je te suggère la série d'articles
suivants.
Run-time Serialization
http://msdn.microsoft.com/msdnmag/issues/02/04/net/
Run-time Serialization, Part 2
http://msdn.microsoft.com/msdnmag/issues/02/07/net/
Run-time Serialization, Part 3
http://msdn.microsoft.com/msdnmag/issues/02/09/net/
--
Cordialement
Yanick
MVP pour Visual Basic
Salut Jean-Michel ! :O)
Tu peux employer la sérialization pour parvenir à ton but car la classe Font
possède l'attribut <Serializable>.
Je t'ai fais un exemple qui sérialize le Font d'un Label. (attention aux
longues lignes et désolé pour celles-ci)
Voici la démarche à suivre pour bien exécuter le test :
1. Démarre toi un nouveau projet "Application Windows" et remplace *tout* le
code contenu dans Form1 par celui ci-dessous.
2. Ouvre le formulaire en mode d'édition graphique.
3. Dans la boite à outils, clique sur la section "Général"
4. Clique-droit *dans* cette section et sélectionne l'item de menu nommé
"Ajouter/Supprimer des éléments...".
5. Dans l'onglet "Composants .NET Framework", sélectionne le composant nommé
"Property Grid".
6. Clique sur "Ok".
7. Lance l'exécution du projet.
8. Modifie le Font du label comme tu le souhaites dans la fenêtre de
propriété, le label en dessous de la fenêtre de propriété te donne un
apperçu du Font sélectionné.
10. Ferme la fenêtre.
11. Redémarre le projet, et la Font sera comme elle était lorsque tu as
fermé la fenêtre la fois d'avant.
Voici le code :
'***
Option Explicit On
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters
Imports System.Runtime.Serialization.Formatters.Binary
Public Class Form1
Inherits System.Windows.Forms.Form
Const FILE_NAME As String = "my_font.txt"
Private m_sFilePath As String
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel
InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste des
composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur Windows
Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents pgFont As System.Windows.Forms.PropertyGrid
Friend WithEvents lblDemoFont As System.Windows.Forms.Label
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.pgFont = New System.Windows.Forms.PropertyGrid
Me.lblDemoFont = New System.Windows.Forms.Label
Me.SuspendLayout()
'
'pgFont
'
Me.pgFont.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)
Me.pgFont.CommandsVisibleIfAvailable = True
Me.pgFont.LargeButtons = False
Me.pgFont.LineColor = System.Drawing.SystemColors.ScrollBar
Me.pgFont.Location = New System.Drawing.Point(8, 8)
Me.pgFont.Name = "pgFont"
Me.pgFont.Size = New System.Drawing.Size(352, 272)
Me.pgFont.TabIndex = 3
Me.pgFont.Text = "Propriété du Font"
Me.pgFont.ViewBackColor = System.Drawing.SystemColors.Window
Me.pgFont.ViewForeColor = System.Drawing.SystemColors.WindowText
'
'lblDemoFont
'
Me.lblDemoFont.Anchor > CType(((System.Windows.Forms.AnchorStyles.Bottom Or
System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)
Me.lblDemoFont.Location = New System.Drawing.Point(8, 288)
Me.lblDemoFont.Name = "lblDemoFont"
Me.lblDemoFont.Size = New System.Drawing.Size(352, 104)
Me.lblDemoFont.TabIndex = 4
Me.lblDemoFont.Text = "Label1"
Me.lblDemoFont.TextAlign > System.Drawing.ContentAlignment.MiddleCenter
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(368, 398)
Me.Controls.Add(Me.lblDemoFont)
Me.Controls.Add(Me.pgFont)
Me.Name = "Form1"
Me.Text = "Démo de sérialisation"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' on créer le nom du fichier employé pour stocker le Font
m_sFilePath = Application.StartupPath() & "" & FILE_NAME
' on relit le Font du fichier s'il existe
Dim fnt As Font = DeserializeFont()
If (Not fnt Is Nothing) Then
lblDemoFont.Font = fnt
End If
' on assigne le Label au property Grid
pgFont.SelectedObject = lblDemoFont
End Sub
Private Function DeserializeFont() As Font
Dim fnt As Font
' vérifie si le fichier existe
' si oui, on retourne le Font contenu dedans
' si non, on renvoit Nothing
If (File.Exists(m_sFilePath)) Then
Dim fs As FileStream
Dim bf As BinaryFormatter
fs = New FileStream(m_sFilePath, FileMode.Open, FileAccess.Read,
FileShare.None)
' on vérifie si le fichier n'est pas vide
If (fs.Length > 0) Then
bf = New BinaryFormatter
fnt = DirectCast(bf.Deserialize(DirectCast(fs, Stream)),
Font)
fs.Close()
End If
End If
Return fnt
End Function
Private Sub SerializeFont(ByVal fnt As Font)
Dim fs As FileStream
Dim bf As BinaryFormatter
' on créer le fichier et stocke le Font dedans
fs = New FileStream(m_sFilePath, FileMode.Create, FileAccess.Write,
FileShare.None)
bf = New BinaryFormatter
bf.Serialize(DirectCast(fs, Stream), fnt)
fs.Close()
End Sub
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Closed
' on sérialise le Font
SerializeFont(lblDemoFont.Font)
End Sub
End Class
'***
Pour en connaitre plus sur le sujet, je te suggère la série d'articles
suivants.
Run-time Serialization
http://msdn.microsoft.com/msdnmag/issues/02/04/net/
Run-time Serialization, Part 2
http://msdn.microsoft.com/msdnmag/issues/02/07/net/
Run-time Serialization, Part 3
http://msdn.microsoft.com/msdnmag/issues/02/09/net/
--
Cordialement
Yanick
MVP pour Visual Basic
Salut Jean-Michel ! :O)
Tu peux employer la sérialization pour parvenir à ton but car la classe Font
possède l'attribut <Serializable>.
Je t'ai fais un exemple qui sérialize le Font d'un Label. (attention aux
longues lignes et désolé pour celles-ci)
Voici la démarche à suivre pour bien exécuter le test :
1. Démarre toi un nouveau projet "Application Windows" et remplace *tout* le
code contenu dans Form1 par celui ci-dessous.
2. Ouvre le formulaire en mode d'édition graphique.
3. Dans la boite à outils, clique sur la section "Général"
4. Clique-droit *dans* cette section et sélectionne l'item de menu nommé
"Ajouter/Supprimer des éléments...".
5. Dans l'onglet "Composants .NET Framework", sélectionne le composant nommé
"Property Grid".
6. Clique sur "Ok".
7. Lance l'exécution du projet.
8. Modifie le Font du label comme tu le souhaites dans la fenêtre de
propriété, le label en dessous de la fenêtre de propriété te donne un
apperçu du Font sélectionné.
10. Ferme la fenêtre.
11. Redémarre le projet, et la Font sera comme elle était lorsque tu as
fermé la fenêtre la fois d'avant.
Voici le code :
'***
Option Explicit On
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters
Imports System.Runtime.Serialization.Formatters.Binary
Public Class Form1
Inherits System.Windows.Forms.Form
Const FILE_NAME As String = "my_font.txt"
Private m_sFilePath As String
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel
InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste des
composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur Windows
Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents pgFont As System.Windows.Forms.PropertyGrid
Friend WithEvents lblDemoFont As System.Windows.Forms.Label
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.pgFont = New System.Windows.Forms.PropertyGrid
Me.lblDemoFont = New System.Windows.Forms.Label
Me.SuspendLayout()
'
'pgFont
'
Me.pgFont.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)
Me.pgFont.CommandsVisibleIfAvailable = True
Me.pgFont.LargeButtons = False
Me.pgFont.LineColor = System.Drawing.SystemColors.ScrollBar
Me.pgFont.Location = New System.Drawing.Point(8, 8)
Me.pgFont.Name = "pgFont"
Me.pgFont.Size = New System.Drawing.Size(352, 272)
Me.pgFont.TabIndex = 3
Me.pgFont.Text = "Propriété du Font"
Me.pgFont.ViewBackColor = System.Drawing.SystemColors.Window
Me.pgFont.ViewForeColor = System.Drawing.SystemColors.WindowText
'
'lblDemoFont
'
Me.lblDemoFont.Anchor > CType(((System.Windows.Forms.AnchorStyles.Bottom Or
System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)
Me.lblDemoFont.Location = New System.Drawing.Point(8, 288)
Me.lblDemoFont.Name = "lblDemoFont"
Me.lblDemoFont.Size = New System.Drawing.Size(352, 104)
Me.lblDemoFont.TabIndex = 4
Me.lblDemoFont.Text = "Label1"
Me.lblDemoFont.TextAlign > System.Drawing.ContentAlignment.MiddleCenter
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(368, 398)
Me.Controls.Add(Me.lblDemoFont)
Me.Controls.Add(Me.pgFont)
Me.Name = "Form1"
Me.Text = "Démo de sérialisation"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' on créer le nom du fichier employé pour stocker le Font
m_sFilePath = Application.StartupPath() & "" & FILE_NAME
' on relit le Font du fichier s'il existe
Dim fnt As Font = DeserializeFont()
If (Not fnt Is Nothing) Then
lblDemoFont.Font = fnt
End If
' on assigne le Label au property Grid
pgFont.SelectedObject = lblDemoFont
End Sub
Private Function DeserializeFont() As Font
Dim fnt As Font
' vérifie si le fichier existe
' si oui, on retourne le Font contenu dedans
' si non, on renvoit Nothing
If (File.Exists(m_sFilePath)) Then
Dim fs As FileStream
Dim bf As BinaryFormatter
fs = New FileStream(m_sFilePath, FileMode.Open, FileAccess.Read,
FileShare.None)
' on vérifie si le fichier n'est pas vide
If (fs.Length > 0) Then
bf = New BinaryFormatter
fnt = DirectCast(bf.Deserialize(DirectCast(fs, Stream)),
Font)
fs.Close()
End If
End If
Return fnt
End Function
Private Sub SerializeFont(ByVal fnt As Font)
Dim fs As FileStream
Dim bf As BinaryFormatter
' on créer le fichier et stocke le Font dedans
fs = New FileStream(m_sFilePath, FileMode.Create, FileAccess.Write,
FileShare.None)
bf = New BinaryFormatter
bf.Serialize(DirectCast(fs, Stream), fnt)
fs.Close()
End Sub
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Closed
' on sérialise le Font
SerializeFont(lblDemoFont.Font)
End Sub
End Class
'***
Pour en connaitre plus sur le sujet, je te suggère la série d'articles
suivants.
Run-time Serialization
http://msdn.microsoft.com/msdnmag/issues/02/04/net/
Run-time Serialization, Part 2
http://msdn.microsoft.com/msdnmag/issues/02/07/net/
Run-time Serialization, Part 3
http://msdn.microsoft.com/msdnmag/issues/02/09/net/
--
Cordialement
Yanick
MVP pour Visual Basic
Le Thu, 19 May 2005 14:07:56 -0700, Jean-Michel a écrit :
> Bonjour,
>
> J'ai un progamme vb.net dans lequel l'utilisateur a la possibilité de
> choisir sa Font pour l'impression d'un texte, je voudrais que mon programme
> puisse stocker cette information dans un fichier texte de manière à ce que
> cette Font puisse être automatiquement récupérée lors d'une prochaine
> utilisation du programme.
>
> Pour stocker cette info, je pense l'enregistrer dans un fichier texte.
>
> Le problème est que je ne sais pas comment faire pour stocker le type Font
> dans un fichier texte.
>
> Voici mon code qui me permet de sélectionner ma Font
>
> If FontDialog1.ShowDialog() = DialogResult.OK Then
> DestinataireEnveloppe1Font.Font = FontDialog1.Font
> Dim Ft = New Font(DestinataireEnveloppe1Font.Font, 60)
> End If
>
> et maintenant voici ma ligne de code concernant l'écriture dans mon fichier,
> et c'est là que ça plante à cause que je veux mettre un type font dans un
> type string
>
> PrintLine(2, Ft)
>
> Il doit falloir utiliser une fonction ou une méthode qui permette la
> conversion, mais comme je suis encore débutant, je ne vois pas.
>
> Si quelqu'un peut m'aider, merci d'avance,
Utilise les typeconverter:
'POUR CONVERTIR EN STRING
Dim value As String
'On récupère le typeconverter de l'objet (ici une FONT)
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(MAFONT.GetType)
If converter.CanConvertTo(GetType(String)) Then
value = converter.ConvertToInvariantString(objVal)
End If
'ET INVERSEMENT POUR CONVERTIR A PARTIR D'UN STRING
Dim value As Font
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(GetType(FONT))
If converter.CanConvertFrom(MaVarSTRING) Then
value = converter.ConvertFromInvariantString(MaVarSTRING)
End If
Le Thu, 19 May 2005 14:07:56 -0700, Jean-Michel a écrit :
> Bonjour,
>
> J'ai un progamme vb.net dans lequel l'utilisateur a la possibilité de
> choisir sa Font pour l'impression d'un texte, je voudrais que mon programme
> puisse stocker cette information dans un fichier texte de manière à ce que
> cette Font puisse être automatiquement récupérée lors d'une prochaine
> utilisation du programme.
>
> Pour stocker cette info, je pense l'enregistrer dans un fichier texte.
>
> Le problème est que je ne sais pas comment faire pour stocker le type Font
> dans un fichier texte.
>
> Voici mon code qui me permet de sélectionner ma Font
>
> If FontDialog1.ShowDialog() = DialogResult.OK Then
> DestinataireEnveloppe1Font.Font = FontDialog1.Font
> Dim Ft = New Font(DestinataireEnveloppe1Font.Font, 60)
> End If
>
> et maintenant voici ma ligne de code concernant l'écriture dans mon fichier,
> et c'est là que ça plante à cause que je veux mettre un type font dans un
> type string
>
> PrintLine(2, Ft)
>
> Il doit falloir utiliser une fonction ou une méthode qui permette la
> conversion, mais comme je suis encore débutant, je ne vois pas.
>
> Si quelqu'un peut m'aider, merci d'avance,
Utilise les typeconverter:
'POUR CONVERTIR EN STRING
Dim value As String
'On récupère le typeconverter de l'objet (ici une FONT)
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(MAFONT.GetType)
If converter.CanConvertTo(GetType(String)) Then
value = converter.ConvertToInvariantString(objVal)
End If
'ET INVERSEMENT POUR CONVERTIR A PARTIR D'UN STRING
Dim value As Font
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(GetType(FONT))
If converter.CanConvertFrom(MaVarSTRING) Then
value = converter.ConvertFromInvariantString(MaVarSTRING)
End If
Le Thu, 19 May 2005 14:07:56 -0700, Jean-Michel a écrit :
> Bonjour,
>
> J'ai un progamme vb.net dans lequel l'utilisateur a la possibilité de
> choisir sa Font pour l'impression d'un texte, je voudrais que mon programme
> puisse stocker cette information dans un fichier texte de manière à ce que
> cette Font puisse être automatiquement récupérée lors d'une prochaine
> utilisation du programme.
>
> Pour stocker cette info, je pense l'enregistrer dans un fichier texte.
>
> Le problème est que je ne sais pas comment faire pour stocker le type Font
> dans un fichier texte.
>
> Voici mon code qui me permet de sélectionner ma Font
>
> If FontDialog1.ShowDialog() = DialogResult.OK Then
> DestinataireEnveloppe1Font.Font = FontDialog1.Font
> Dim Ft = New Font(DestinataireEnveloppe1Font.Font, 60)
> End If
>
> et maintenant voici ma ligne de code concernant l'écriture dans mon fichier,
> et c'est là que ça plante à cause que je veux mettre un type font dans un
> type string
>
> PrintLine(2, Ft)
>
> Il doit falloir utiliser une fonction ou une méthode qui permette la
> conversion, mais comme je suis encore débutant, je ne vois pas.
>
> Si quelqu'un peut m'aider, merci d'avance,
Utilise les typeconverter:
'POUR CONVERTIR EN STRING
Dim value As String
'On récupère le typeconverter de l'objet (ici une FONT)
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(MAFONT.GetType)
If converter.CanConvertTo(GetType(String)) Then
value = converter.ConvertToInvariantString(objVal)
End If
'ET INVERSEMENT POUR CONVERTIR A PARTIR D'UN STRING
Dim value As Font
Dim converter As System.ComponentModel.TypeConverter > System.ComponentModel.TypeDescriptor.GetConverter(GetType(FONT))
If converter.CanConvertFrom(MaVarSTRING) Then
value = converter.ConvertFromInvariantString(MaVarSTRING)
End If