3 Stimmen

Wie verweise ich auf ein Windows-Formular-Steuerelement mit Namen (C# / VB)

Angenommen, ich habe in einem Windows-Formular ein Label-Steuerelement mit dem Namen "UserName". Wie kann ich programmatisch auf diese Bezeichnung verweisen, indem ich den Bezeichnungsnamen verwende?

Zum Beispiel kann ich das:

For each ctrl as Control in TabPage.Controls
If ctrl.Name = "UserName" Then
' Do something
End If
Next

Das scheint ziemlich ineffizient zu sein. Ich würde gerne etwas tun wie:

TabPage.Controls("UserName").Text = "Something"

Ich habe ein wenig gegoogelt, konnte aber keine zufriedenstellende Antwort finden. Die meisten schlug Schleife, einige sagte .NET 2005 unterstützt keine direkte refenece mit String-Namen, und FindControl Methode war asp.net nur...

EDIT

Vielen Dank für die bisherigen Antworten. Hier ist ein bisschen mehr Detail.

Ich habe ein Windows-Formular mit drei Registerkarten, die alle in Design und Funktion sehr ähnlich sind, d.h. gleiche Dropdown-Menüs, Beschriftungen, Reaktion auf Ereignisse usw.

Anstatt Code für jedes Ereignis pro Registerkarte zu schreiben, habe ich eine Klasse erstellt, die die Ereignisse usw. pro Registerkarte steuert.

Zum Beispiel gibt es auf jeder Registerkarte ein Label namens "RecordCounter", das einfach die Anzahl der Zeilen in der Datentabelle anzeigt, wenn diese durch die Auswahl einer Variablen in einem Dropdown-Menü gefüllt wird.

Was ich also tun möchte, ist, bei der Auswahl einer Variablen im Dropdown-Menü, die datagridview füllt sich mit Daten, und dann möchte ich einfach die Anzahl der Zeilen in einem Label ("RecordCounter") anzuzeigen.

Dies ist genau der gleiche Prozess auf jeder Registerkarte, so was ich tue, ist die Übergabe der Registerkarte an die Klasse und dann möchte ich in der Lage sein, auf den "RecordCounter" zu verweisen und ihn dann zu aktualisieren.

In meiner Klasse setze ich die ActivePage-Eigenschaft auf die TabPage, die der Benutzer ausgewählt hat, und möchte dann in der Lage sein, etwas wie zu tun:

ActivePage.RecordCounter.Text = GetNumberOfRows()

10voto

John Rasch Punkte 60054

Sie sollten in der Lage sein, Folgendes zu verwenden Find() :

TabPage.Controls.Find("UserName", false);

Damit werden alle untergeordneten Steuerelemente durchsucht und ein Array derjenigen zurückgegeben, die mit der Zeichenfolge übereinstimmen. Wenn Sie angeben true für das 2. Argument, so werden auch die Steuerelemente der untergeordneten Steuerelemente durchsucht.

8voto

Max Schmeling Punkte 12091

Wird Ihr Steuerelement zur Entwurfszeit oder zur Laufzeit hinzugefügt?

Wenn sie zur Entwurfszeit hinzugefügt wird, können Sie sie einfach über den Namen referenzieren: Me.UserName.Text = "Something"

Wenn es zur Laufzeit hinzugefügt wird, können Sie Folgendes verwenden:

TabPage.Controls.Find("UserName", true) 

Der zweite Parameter weist das Programm an, auch alle Kinder zu durchsuchen, so dass Ihr Steuerelement auf jeden Fall gefunden werden sollte.

4voto

David Punkte 70550

Es sei denn, ich missverstehe die Frage Kontext, ich denke, Sie machen es zu schwierig. in Code, verwenden Sie einfach thelabel Name als Ihre Referenz wie in:

UserName.Text = "Something"

Gibt es etwas, das Sie zu erreichen versuchen, so dass das nicht richtig ist?

2voto

CoderDennis Punkte 13343

Wie erstellen Sie Ihre Kontrollen?

Wenn dies zur Entwurfszeit geschieht, dann sollte jedes Steuerelement einen benannten Verweis haben.

Wenn Sie Steuerelemente zur Laufzeit hinzufügen, können Sie ein Wörterbuch erstellen, das Verweise enthält, die durch eine Zeichenfolge indiziert sind, und jedes Steuerelement bei seiner Erstellung zu diesem Wörterbuch hinzufügen.

0voto

xpda Punkte 15262

Eine Lösung wäre, die Steuerelemente zusätzlich zur oder anstelle der Tabpage an die Klasse zu übergeben. Sie könnten zum Beispiel eine RecordCounter-Eigenschaft zusätzlich zu Ihrer ActivePage-Eigenschaft haben. (Nebenbei bemerkt: Find ist effizient im Code, aber nicht so effizient zur Laufzeit).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X