Ich arbeite in C# in einem vorhandenen WinForm-Projekt. Der ursprüngliche Code verwendet Tag, um Hardwareadressinformationen für eine Reihe von Textfeldern zu übermitteln, die bestimmte Hardwareregister in einem verbundenen Mikrocontrollersystem darstellen. Ich weiß, wie man ein unbekanntes Steuerelement findet, indem ich mit der Control.ControlCollection.Find-Methode nach seinem Namen suche, aber es ist mir unklar, ob ich das Steuerelement anhand des Tags finden kann (in diesem Fall nur ein String).Fähigkeit, WinForm-Steuerelement über die Tag-Eigenschaft zu finden
Antwort
up Folgen auf meinen Kommentar:
private void FindTag(Control.ControlCollection controls)
{
foreach (Control c in controls)
{
if (c.Tag != null)
//logic
if (c.HasChildren)
FindTag(c.Controls); //Recursively check all children controls as well; ie groupboxes or tabpages
}
}
Dann können Sie die Steuerelementname in der if-Anweisung erhalten und tun, was Sie wollen von dort aus tun.
Fügen Sie einfach einen Edit zu dieser Lösung hinzu, da er einige Jahre später immer noch die seltene Upvote erhält. Sie können diese Lösung auch ändern, um den Typ der Kontrolle zu überprüfen, die c
ist und verschiedene Arten der Logik auch tut. Also, wenn Sie über alle Ihre Steuerelemente Schleife und behandeln eine Textbox
One Way und RadioButon
eine andere Möglichkeit, können Sie das auch tun. Ich musste das auch bei einigen Projekten tun, bei denen ich den obigen Code nur geringfügig ändern konnte, um diese Arbeit zu erledigen. Nicht unbedingt relevant für die Frage des OP, aber ich dachte, ich würde es hinzufügen.
Meine Antwort hatte eine Einschränkung. Es ist nicht rekursiv. – Tilak
@Tilak, Ihre ursprüngliche Lösung war sehr effizient in dem Fall, in dem Rekursion nicht benötigt wurde. Danke für den Vorschlag. –
@ sab669, danke für den Vorschlag. Das funktioniert großartig. –
können Sie LINQ
verwenden Kontrollen zu finden, basierend auf Tag
var items = parentControl.ControlCollection;
var item = items.Cast<Control>().FirstOrDefault(control => String.Equals(control.Tag, tagName));
public static Control FindByTag(Control root, string tag)
{
if (root == null)
{
return null;
}
if (root.Tag is string && (string)root.Tag == tag)
{
return root;
}
return (from Control control in root.Controls
select FindByTag(control, tag)).FirstOrDefault(c => c != null);
}
Übergeben Sie das äußerste Steuerelement an es (d. H. Das Formular oder den Container, den Sie durchsuchen möchten). Beachten Sie, dass dies das Root-Steuerelement in die Suche einschließt.
danke für den Vorschlag. –
- 1. Fähigkeit, Init-Skript in Firefox zu laden?
- 2. Behindert Wicket SEO oder Suchmaschinen die Fähigkeit zu crawlen?
- 3. Fähigkeit, ohne zu verlieren jede Tabelle
- 4. jQuery Fähigkeit zu ändern ID für Element
- 5. mit Fähigkeit auswählen, um neue zu erstellen
- 6. Wie ID des Elements zu finden, über die Popup ist
- 7. Vagrant versucht, die Fähigkeit ‚mount_virtualbox_shared_folder‘ Fehler
- 8. Ist Flash eine gute Fähigkeit zu erlernen?
- 9. Die erforderliche Mindest Cuda Fähigkeit beträgt 3,5
- 10. Weitere Informationen über die Datenbank finden
- 11. Haben Rust-Sammlungen die Fähigkeit, die Daten zu besitzen, die sie speichern?
- 12. Fähigkeit primeNG Editorbox
- 13. Fähigkeit, asynchronen Aufruf abzubrechen
- 14. urllib2 - Fähigkeit überspringen Zertifikatsprüfung
- 15. Postgres fehlende pgcrypt Fähigkeit?
- 16. Ad-hoc-Fähigkeit SQL SSRS
- 17. Wie bestimmt die Fähigkeit, große Zahlen zu faktorisieren, die Sicherheit gängiger Verschlüsselungsalgorithmen?
- 18. Testen der Flash-Fähigkeit auf der Serverseite
- 19. Java eingebettete Datenbank w/Fähigkeit, als eine Datei zu speichern
- 20. Wie speichern Sie die Daten für die Alexa-Fähigkeit, die ich entwickle?
- 21. Wie eine Fähigkeit-Wert im Selenium Grid zu ersetzen, bevor
- 22. Wie für Touchscreen (nicht "Touch-Fähigkeit") zu testen?
- 23. Fähigkeit zu erfassen, was Benutzer auf der Webseite getan hat
- 24. eine effiziente Datenstruktur zu halten Strukturvariable mit der Fähigkeit Sortier
- 25. Deaktivierung der Fähigkeit, meine eigenen ausgehenden Multicast-Datagramme zu empfangen
- 26. Reflexion über Schnittstellen finden implementiert
- 27. Alexa Fähigkeit erkennt nicht meine richtige Antwort
- 28. Zeigen Sie dem Benutzer die Voraussetzungen für eine CanCan-Fähigkeit
- 29. Entferne die Fähigkeit, bestimmte Zeilen im Grid auszuwählen ExtJS 4
- 30. Fähigkeit, alle Elemente mit bestimmten Objekt-Tag zu löschen tkinter
Iterieren Sie über die Control-Sammlung und überprüfen Sie den spezifischen Tag-Wert? – sab669
Sie sollten Ihr Design ändern, sollten wir eine solche Aufgabe nicht ausführen. Natürlich müssen Sie alle Steuerelemente durchlaufen und das "Tag" jedes einzelnen überprüfen, bis Sie es finden. Die interne Implementierung von 'Find' sollte dasselbe tun. Die Geschwindigkeit hängt alles von der "Datenstruktur" ab. –