Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Matrice di Label
Forum - C# / VB.NET - Matrice di Label

Avatar
francofranco (Normal User)
Newbie


Messaggi: 7
Iscritto: 06/12/2010

Segnala al moderatore
Postato alle 7:42
Venerdì, 10/12/2010
Qual è il codice per assegnare l'evento Click ad una matrice di Label, in modo che cliccando su una Label si eseguano istruzioni che riguardano solo quella singola Label (e non tutte le Label della Matrice)?
Grazie a chi mi vuol rispondere.:)

PM
Avatar
francofranco (Normal User)
Newbie


Messaggi: 7
Iscritto: 06/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 11:11
Martedì, 14/12/2010
Ciao! Di incomprensioni ne ho un sacco... Avevo già scorso la pagina del link (ma ad essere sincero non ci avevo capito una mazza!). Così ho scaricato la tua guida e piano piano vedo di digerirla. Il fatto è che nel mio caso specifico non si tratta di Label che trascini sul Form (e nelle Proprietà ti appare tutto quanto ti può servire). Qui il Form è vuoto e mi sento impotente...

Non è che potresti scrvermi tu le poche righe di codice che risultano sbagliate sopra?
Grazie.

PM
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 17:12
Venerdì, 24/12/2010
@francofranco : scusa non pensavo che la tua richiesta fosse per VB.net, la domanda era troppo generica... la risposta ovviamente era generica... per quello che vuoi fare tu ti suggerisco di provare una cosa del genere
Codice sorgente - presumibilmente VB.NET

  1. Public Partial Class Form1
  2.         Inherits Form
  3.         Public Sub New()
  4.                 InitializeComponent()
  5.         End Sub
  6.         Private Sub Form1_Load(sender As Object, e As EventArgs)
  7.                 For i As Integer = 0 To 10
  8.                         Dim label As New Label()
  9.                         label.Location = New Point(12, 20 + i * 18)
  10.                         label.Size = New Size(50, 18)
  11.                         label.AutoSize = False
  12.                         label.TextAlign = ContentAlignment.MiddleCenter
  13.                         label.BorderStyle = BorderStyle.FixedSingle
  14.                         label.Tag = i.ToString()
  15.                         label.Click += label_Click
  16.                         Me.Controls.Add(label)
  17.                 Next
  18.         End Sub
  19.  
  20.         Private Sub label_Click(sender As Object, e As EventArgs)
  21.                 Dim indice As String = TryCast(TryCast(sender, Label).Tag, String)
  22.         End Sub
  23. End Class



P.S: l'ho scritto in C# e convertito in VB.net con questo http://converter.telerik.com/ non so se funziona

@Totem: è vero, con gli array non puoi risalire all'indice dell'elemento dato l'elemento ennesimo, ma con una lista si, in questo caso è sbagliato usare l'array e creare un ciclo per capire qual'è l'indice mi sembra la cosa peggiore che si possa fare

Ultima modifica effettuata da Gianluca87 il 24/12/2010 alle 17:13
PM
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 17:15
Venerdì, 24/12/2010
P.S: grazie per il -1 a caso

PM
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Up
-1
Down
V
Segnala al moderatore
Postato alle 19:02
Sabato, 11/12/2010
Associazione Evento
Codice sorgente - presumibilmente Plain Text

  1. labelX.Click += labelX_Click;



Metodo associato all'evento
Codice sorgente - presumibilmente C# / VB.NET

  1. private void labelX_Click(object sender, EventArgs e)
  2.         {
  3.  
  4.         }



PM
Avatar
francofranco (Normal User)
Newbie


Messaggi: 7
Iscritto: 06/12/2010

Up
-1
Down
V
Segnala al moderatore
Postato alle 7:18
Lunedì, 13/12/2010
Gianluca grazie due volte, una per aver risposto e l'altra per avermi considerato un veterano del VBNet. Fai finta invece di parlare a un bambino delle elementari... Ho tentato di accostare le tue righe di codice a quelle mie...
Io vorrei che cliccando una label si verificasse del codice solo per quella label (per esempio il suo numero di Index)... Fammi un piacere... dai una scorsa al codice e se puoi correggerlo... Grazie

Public Class Form1
    Public Labels(11) As Label
    Private void labels_Click(object sender, EventArgs) { }
    ' Mi dice errore: prevista fine dell'istruzione

    Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load

        For I As Byte = 0 To 10
            Labels(I) = New Label()
            Labels(I).Location = New Point(12, 20 + I * 18)    
            Labels(I).Size = New Size(50, 18)
            Labels(I).AutoSize = False
            Labels(I).TextAlign = ContentAlignment.MiddleCenter
            Labels(I).BorderStyle = BorderStyle.FixedSingle
            Me.Controls.Add(Labels(I))
        Next
    End Sub

    sub labels_Click(object sender, EventArgs) { }
        ' Mi dice errore: Parola chiave non valida come identificatore

        Labels.Click += labels_Click()
        ' Mi dice errore: click non e un membro di System Array
        'Labels(Click).Text = Str(Click)
        'argomento non specificato per il parametro di EventArgs

    End Sub

End Class

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
-1
Down
V
Segnala al moderatore
Postato alle 17:10
Lunedì, 13/12/2010
Il problema è che stai tentando di copiare codice in C# in un sorgente in vb, il che potrebbe generare alcune incomprensioni...
http://totemslair.org/guide/viewchapter.php?guida=vb&id=53
Non c'è modo di risalire all'indice dell'oggetto sender se non:
- confrontarlo con ogni elemento dell'array Labels e vedere a quale corrisponde;
- assegnare il valore dell'indice alla proprietà Label.Tag durante l'inizializzazione.

PM