OVH Cloud OVH Cloud

Index pour plusieurs Textbox ?

2 réponses
Avatar
Fred Godefroidt
Bonjour,

En VB6, je faisais un copier coller d'une textebox et j'avais 2 Textbos avec
le meme nom et 2 index (0 et 1).

Avec VB.NET 2003, comment faire ?

Car si je dois créer des objets, différents, je vais devoir coder beaucoup
plus, au lieu de juste tester l'index avec un sub TextBox(i).change par
exemple...........

Please Help

FG

2 réponses

Avatar
alan
Ben nom...
Quand tu créé tes textbox, tu leur donnes un nom particulier (Ex: de TB1 à
TB10).
Tu crée ton gestionnaire d'evenement pour le premier (Ex: TB1)
Dans ton Form_Load, tu ajoutes test gestionnaires d'evenements
AddHandler TB2.TextChanged, AddressOf TB1_TextChanged

Dans ton TB1_TextChanged (Sender as Object, e as EventArgs)

Sender est l'objet lui même
Donc : Dim TB as TextBox = CType(Sender, TextBox)
TB.Name = nom du textbox qui a déclenché...

Ex : Dim MonNumTextBox as Integer = TB.Name.Substring(2) 'dans notre ex : 1
ou 2 ... 10)

Si cela te convient...

"Fred Godefroidt" a écrit :

Bonjour,

En VB6, je faisais un copier coller d'une textebox et j'avais 2 Textbos avec
le meme nom et 2 index (0 et 1).

Avec VB.NET 2003, comment faire ?

Car si je dois créer des objets, différents, je vais devoir coder beaucoup
plus, au lieu de juste tester l'index avec un sub TextBox(i).change par
exemple...........

Please Help

FG





Avatar
Zoury
Salut Fred !

En VB6, je faisais un copier coller d'une textebox et j'avais 2 Textbos


avec
le meme nom et 2 index (0 et 1).

Avec VB.NET 2003, comment faire ?



Les groupes de contrôles n'existe plus en .NET. Tu peux toutefois définir
une hashtable qui conserverait la référence vers les TextBoxes que tu veux
regrouper. Ce qui facilite le modification de propriété communes (Enabled,
VIsible, etc).

Tu peux aussi faire en sorte que tous les événements TextChanged, par
exemple, soit géré via une seule procédure. Pour y parvenir, tu peux soit
exploiter l'instruction Handles ou encore employé les instructions
Add/RemoveHandler.

Voici un p'tit exemple qui un tour rapide des possibilité :
'***
Public Class Form1
Inherits System.Windows.Forms.Form

Private m_htTextBoxes As Hashtable

#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 TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
Friend WithEvents TextBox3 As System.Windows.Forms.TextBox
Friend WithEvents TextBox4 As System.Windows.Forms.TextBox
Friend WithEvents TextBox5 As System.Windows.Forms.TextBox
Friend WithEvents TextBox6 As System.Windows.Forms.TextBox
Friend WithEvents Button1 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.TextBox2 = New System.Windows.Forms.TextBox
Me.TextBox3 = New System.Windows.Forms.TextBox
Me.TextBox4 = New System.Windows.Forms.TextBox
Me.TextBox5 = New System.Windows.Forms.TextBox
Me.TextBox6 = New System.Windows.Forms.TextBox
Me.Button1 = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(8, 8)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(216, 20)
Me.TextBox1.TabIndex = 0
Me.TextBox1.Text = "TextBox1"
'
'TextBox2
'
Me.TextBox2.Location = New System.Drawing.Point(8, 32)
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.Size = New System.Drawing.Size(216, 20)
Me.TextBox2.TabIndex = 1
Me.TextBox2.Text = "TextBox2"
'
'TextBox3
'
Me.TextBox3.Location = New System.Drawing.Point(8, 56)
Me.TextBox3.Name = "TextBox3"
Me.TextBox3.Size = New System.Drawing.Size(216, 20)
Me.TextBox3.TabIndex = 2
Me.TextBox3.Text = "TextBox3"
'
'TextBox4
'
Me.TextBox4.Location = New System.Drawing.Point(232, 8)
Me.TextBox4.Name = "TextBox4"
Me.TextBox4.Size = New System.Drawing.Size(216, 20)
Me.TextBox4.TabIndex = 3
Me.TextBox4.Text = "TextBox4"
'
'TextBox5
'
Me.TextBox5.Location = New System.Drawing.Point(232, 32)
Me.TextBox5.Name = "TextBox5"
Me.TextBox5.Size = New System.Drawing.Size(216, 20)
Me.TextBox5.TabIndex = 4
Me.TextBox5.Text = "TextBox5"
'
'TextBox6
'
Me.TextBox6.Location = New System.Drawing.Point(232, 56)
Me.TextBox6.Name = "TextBox6"
Me.TextBox6.Size = New System.Drawing.Size(216, 20)
Me.TextBox6.TabIndex = 5
Me.TextBox6.Text = "TextBox6"
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(376, 88)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(72, 24)
Me.Button1.TabIndex = 6
Me.Button1.Text = "Button1"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(456, 118)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.TextBox6)
Me.Controls.Add(Me.TextBox5)
Me.Controls.Add(Me.TextBox4)
Me.Controls.Add(Me.TextBox3)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.TextBox1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Dim entry As DictionaryEntry

' ajoute les textboxes dans notre hashtable
m_htTextBoxes = New Hashtable(6)
m_htTextBoxes.Add(TextBox1.Name, TextBox1)
m_htTextBoxes.Add(TextBox2.Name, TextBox2)
m_htTextBoxes.Add(TextBox3.Name, TextBox3)
m_htTextBoxes.Add(TextBox4.Name, TextBox4)
m_htTextBoxes.Add(TextBox5.Name, TextBox5)
m_htTextBoxes.Add(TextBox6.Name, TextBox6)

' on "abonne" nos textboxes à l'événement GotFocus
For Each entry In m_htTextBoxes
AddHandler DirectCast(entry.Value, TextBox).GotFocus, AddressOf
Me.TextBox_GotFocus
Next

Button1.Text = "En&abled"

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

If (Not m_htTextBoxes Is Nothing) Then

Dim entry As DictionaryEntry
Dim txt As TextBox

' on modifie la visilibilité de tous les textboxes
For Each entry In m_htTextBoxes
txt = DirectCast(entry.Value, TextBox)
txt.Enabled = Not txt.Enabled
Button1.Text = IIf(txt.Enabled, "Dis&abled", "En&abled")
Next

End If

End Sub

' déclenchée grâce à Handles
Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e
As System.EventArgs) _
Handles TextBox1.TextChanged, _
TextBox2.TextChanged, _
TextBox3.TextChanged, _
TextBox4.TextChanged, _
TextBox5.TextChanged, _
TextBox6.TextChanged

If (Not m_htTextBoxes Is Nothing) Then

Dim entry As DictionaryEntry

' on modifie le text de tous les autres
' textboxes pour correspondre au nouveau
For Each entry In m_htTextBoxes
If (Not entry.Value Is sender) Then
DirectCast(entry.Value, TextBox).Text DirectCast(sender, TextBox).Text
End If
Next

End If

End Sub

' déclenchée grâce à AddHandler
Private Sub TextBox_GotFocus(ByVal sender As Object, ByVal e As
System.EventArgs)

Me.Text = String.Format("{0} à le focus", DirectCast(sender,
TextBox).Name)

End Sub

Private Sub Form1_Closed(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Closed

Dim entry As DictionaryEntry

For Each entry In m_htTextBoxes
RemoveHandler DirectCast(entry.Value, TextBox).GotFocus,
AddressOf Me.TextBox_GotFocus
Next
m_htTextBoxes = Nothing

End Sub

End Class
'***