Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
18/10/08 10:51
dartraf
Ciao a tutti
da poco ho incominciato ad utilizzare VB .net venendo da VB 6.
In VB 6 utilizzavo spesso i vettori di controlli per gestire tutti i controlli simili in un unico gestore degli eventi e lì selezionare l'operazione da fare

Private Sub Command1_Click(Index As Integer)
    Select Case Index
        Case 0
            ' operazione 0
        Case 1
            ' operazione 1
        Case 2
            ' operazione 2
    End Select
End Sub


Ho notato che in VB .net non esiste questa funzione.
Come faccio ad implementare un qualcosa del genere???
Help me!
aaa
18/10/08 12:01
fabi3194
totem.altervista.org/guida/versione2/…
ecco qui!
ps:grazie totem :k:
aaa
18/10/08 15:27
dartraf
Aspetta ma io non ho chiesto del costrutto select case.....
A me interessa realizzare vettori di oggetti (tipo commandbutton) per poi usarli in un solo gestore degli eventi.
In vb 6 ogni oggetto aveva la proprietà index per realizzare questo meccanismo.
Come si fa in vb .net??
aaa
18/10/08 15:38
dartraf
Forse ho trovato qlcs tra i download...
grazie.
aaa
18/10/08 15:39
Il Totem
Forse ti riferisci alla mia classe per gestire le matrici di controlli.
aaa
24/10/08 19:50
TSP
ho scritto una guida, è in c# ma è uguale:

Molti credono che nel linguaggio C# le matrici di controlli non esistano, navigando sul web ho potuto appurare quanto ho appena detto quindi procedero alla spiegazione di come creare una matrice di controlli:

1. aggiungiamo la seguente sitring nel file nomeform.designer.cs nel punto in cui troviamo moltre altre righe simili.
Codice sorgente
private System.Windows.Forms.TextBox[] TextBoxM;


2. Ora dobbiamo riservare uno spazio nella memoria alla nostra matrice.
Codice sorgente
TextBoxM = new System.Windows.Forms.TextBox[20]


2. per creare nuovi controlli con diverso indice ma uguale nome procediamo in questo modo.
Codice sorgente
TextBoxM[x] = new System.Windows.Forms.TextBox();

(x sta per il numero dell'indice)
da ricordare che non potremo aumentare i nostri controlli in modo da renderli superiori al limite precedentemente stabilito.
quindi
Codice sorgente
TextBoxM[21] = new System.Windows.Forms.TextBox();
non potrà esistere.
aaa
26/10/08 15:14
Il Totem
Non vengono comunque visualizzate nel designer. Aggiungere quel codice è come aggiungere controlli a runtime.
aaa
28/10/08 10:32
dartraf
Hei io ho pensato ad una soluzione del genere:


Public Class ArrayControl(Of C As {Control, New})
    Inherits System.Collections.CollectionBase


    ' form che ospita l'array di controlli
    Private ReadOnly HostForm As System.Windows.Forms.Form


    ' elenco degli eventi
    Public Event m_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    ' ed altri

    ' costruttori
    Public Sub New(ByVal host As System.Windows.Forms.Form)
        HostForm = host
    End Sub

    Public Sub New(ByVal host As System.Windows.Forms.Form, ByVal x As Single, ByVal y As Single)
        Me.New(host)
        Me.AddNewControl(x, y)
    End Sub


    ' proprieta di default
    Default Public ReadOnly Property Item(ByVal Index As Integer) As C
        Get
            Return CType(Me.List.Item(Index), C)
        End Get
    End Property


    ' metodi
    Public Sub Remove(Optional ByVal index As Integer = -1)
        If Me.Count > 0 Then
            If index = -1 Then
                HostForm.Controls.Remove(Me(Me.Count - 1))
                Me.List.RemoveAt(Me.Count - 1)
            Else
                HostForm.Controls.Remove(Me(index))
                Me.List.RemoveAt(index)
            End If
        End If
    End Sub

    Private Sub AddEvent(ByVal controllo As C)
        AddHandler controllo.Click, AddressOf ClickHandler
end sub

    Public Function AddNewControl(ByVal x As Single, ByVal y As Single, Optional ByVal visibile As Boolean = True) As C
        Dim controllo As New C

        Me.List.Add(controllo)
        HostForm.Controls.Add(controllo)

        controllo.Top = y
        controllo.Left = x
        controllo.Visible = visibile
        controllo.Tag = Me.Count - 1
        controllo.Text = "Controllo " & Me.Count.ToString

        AddEvent(controllo)

        Return controllo
    End Function

    Public Function AddNewControl(ByVal obj As C) As C
        Me.List.Add(obj)
        obj.Tag = Me.Count - 1
        AddEvent(obj)
        Return obj
    End Function



    ' gestori degli eventi
    Public Sub ClickHandler(ByVal sender As Object, ByVal e As System.EventArgs)
        RaiseEvent m_Click(sender, e)
    End Sub
    
    ' ed altri


Ditemi se è giusta
aaa