2009-05-21 3 views
0

Ich habe ein Problem mit dynamischen Laufzeitsteuerelementen.Wie kann ich identifizieren, in welchem ​​Steuerelement ich bin (vb.net cf)

Ich erstelle eine Gruppe von Steuerelementen pro Datensatz zur Anzeige in einem Formular.

Ich füge die Datensatz-ID als ein Tag auf jedem der Steuerelemente hinzu, um zu identifizieren, zu welchem ​​Datensatz sie gehören.

While rCONT.Read 
    Dim txtphome As New TextBox 
    txtphome.Name = "phone" + rCONT.Item("pcontID").ToString 
    txtphome.Text = rCONT.Item("pcontPhHome").ToString 
    txtphome.Tag = rCONT.Item("pcontID").ToString 
    tcPatientDetails.TabPages(2).Controls.Add(txtphome) 
     AddHandler txtphome.LostFocus, AddressOf SaveContactChange 
     AddHandler txtphome.GotFocus, AddressOf SetContactNumber 
End While 

In SetContactNumber Ich möchte Wie der Tag-Wert speichern kann ich feststellen, welche es

Antwort

4

Ihres SetContactNumber Ereignis definiert ist als sagen Lassen ausgelöst Steuerung:

C#

private void SetContactNumber(object sender, EventArgs e) 
    { 
     //Stuff that happens when the SetContactNumber event is raised... 
    } 

VB

Private sub SetContactNumber(sender As object, e As EventArgs) 
     //Stuff that happens when the SetContactNumber event is raised 
    End Sub 

Der Sender Parameter ist das Objekt, das das Ereignis ausgelöst hat. Sie müssen also nur um es zu werfen und den Wert mit dem Tag legen:

C#

((textbox)sender).tag = "Whatever you wanted to put in here"; 

VB

CType(sender, textbox).tag = "Whatever you wanted to put in here" 

Der Tag-Eigenschaft einen Wert vom Typ Objekt nimmt Der zugewiesene Wert kann also beliebig sein: String, Objekt, Instanz einer Klasse usw. Es liegt in Ihrer Verantwortung, dieses Objekt zu werfen, wenn Sie es ziehen g es aus der Tag-Eigenschaft heraus, um es zu benutzen.

Wenn Sie also alles zusammensetzen, wird das Objekt, das das Ereignis ausgelöst hat, abgerufen, als Textbox umgewandelt und der angegebene Wert in die Eigenschaft tag übergeben.

C#

private void SetContactNumber(object sender, EventArgs e) 
    { 
     textbox thisTextbox = (textbox)sender; 
     thisTextbox.tag = "Whatever you wanted to put in here"; 
    } 

VB

Private Sub SetContactNumber(sender As Object, e As EventArgs) 
     Dim thisTextbox As TextBox = CType(sender, Textbox) 
     thisTextbox.tag = "Whatever you wanted to put in here" 
    End Sub 
+0

+1; gute Erklärung. Aber ich hatte den Eindruck, dass er das Tag in der Schleife zugewiesen hat und es im Event-Handler verwenden wollte (aber es war ein bisschen unklar). –

+0

Es * war * ein bisschen unklar ... und gleich danach wurde mir klar, dass ich mein ganzes Beispiel in C# geschrieben hatte und er wollte VB ... – BenAlabaster

Verwandte Themen