Controls dynamisch ansprechen
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von nogood.
-
-
1. Was is'n das für ein besch...werlicher Threadtitel? Bitte umgehend an was inhaltlich sinnvolles anpassen.
2. "Ich finde es gerade im Internet nicht." Recherchen können auch manchmal länger dauern und ggf. nur durch Anpassen der Suchbegriffe zum Erfolg führen.
3. Arbeitest Du mitOption Strict On
?
4.DirectCast(Me.Controls("ProgressBar" & i.ToString), ProgressBar).Value =
wäre eine Möglichkeit. Oder Du fasst alle ProgressBars zu einem Array zusammen und gehst die durch:
5. Deine ProgressBars haben bessere Namen verdient.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
Danke für die nächtliche Antwort
1. Ja ich weiß bescheuerter Titel -> Mein Gedanke war ich frag die nächste Banale Sache dann wieder hier -> es ist schon spät war wohl einfach nur ...
2. siehe Titel
3. nein
4. bringt bei mir eine Fehlermeldung (System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.")
schade das wäre ne schöne Lösung (habe vorher dies versucht (InternetRecherche) ging auch nicht :
------------
Die Idee mit dem Array hat geklappt. DANKE
Falls jemand eine Idee hat warum das mit Me.Controls nicht klappt würde mich schon interessieren was ich da wieder für ein Bock drin habe... ich sag mal gute Nacht
codewars.com Rank: 4 kyuDieser Beitrag wurde bereits 3 mal editiert, zuletzt von „nogood“ ()
-
Na, wie heißen denn Deine ProgressBars? Denn bei mir läuft es, wenn die Dinger so heißen, also
ProgressBar1, ProgressBar2, ProgressBar3, ProgressBar4, ProgressBar5, ProgressBar6, ProgressBar7, ProgressBar8, ProgressBar9, ProgressBar10
Im Designer anklicken -> Eigenschaftenfenster -> (Name). Exakte Angaben werden gebraucht!
btw: Dass Du ohneOption Strict On
arbeitest, wird Dir hier im Forum oft mit Argwohn übelgenommen. Denn ohne das entstehen nicht wenige Fehler, die sich einfach vermeiden lassen ->Option Strict On
! siehe empfohlene VS-EinstellungenDieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()
-
Die ProgressBars heißen genau so wie Du schreibst: ProgressBar1, ProgressBar2,...
Deine Idee Mit dem Array funktioniert ja auch DANKE dafür (dafür müssen die Namen ja auch stimmen).
Warum das mit Me.Controls nicht geht weiß ich nichtcodewars.com Rank: 4 kyu -
Wenn der Fehler kommt, hält ja das Programm an. Fahr mal mit dem Mauszeiger dann über das
i
und sag mal an, welchen Wert es zu diesem Zeitpunkt hat.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
-
nogood schrieb:
Ja das ist die Lösung
Das ist Grütze.
Wenn Du Controls mit ihrem Namen ansprichst, kannst Du sie nicht mehr umbenennen.
Und:
Wozu müssen 10 Progressbars synchron laufen?Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Man kann auch, als Alternative zu der Array Lösung von @VaporiZed, einfach alle Controls der Form per Schleife durchlaufen und mit Werten befüllen. Deine Lösung @nogood finde ich nicht gut da „Dirty Workaround“ ..."Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
mrMo schrieb:
einfach alle Controls der Form per Schleife durchlaufen und mit Werten befüllenDieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
VaporiZed schrieb:
mrMo schrieb:
einfach alle Controls der Form per Schleife durchlaufen und mit Werten befüllen
Er müsste den Typ des Controls abfragen das er am Wickel hat und seinen Code nur ausführen, wenn es sich um eine Progressbar handelt.Gruß Murdoc -
VaporiZed schrieb:
Und falls da noch [...] 4 ProgressBars sind, die unangetastet bleiben sollen?
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
@VaporiZed wenn er nicht alle Progressbars ansprechen will, wäre die Array Lösung von dir die richtige."Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
RodFromGermany schrieb:
nogood schrieb:
Ja das ist die Lösung
Wenn Du Controls mit ihrem Namen ansprichst, kannst Du sie nicht mehr umbenennen.
Und:
Wozu müssen 10 Progressbars synchron laufen?
1. Danke für die ganzen Infos
2.Bin ja noch blutiger VB Anfänger. Könnte Jemand einen Link Posten wo das mit Me.Controls ()... nochmal simple erklärt wird. Oder kurz sagen warum dies nicht die beste Lösung ist. Warum kann man den Namen denn nicht immer wieder so ändern?
3. So wie ich das jetzt raus lese wäre es mit dem Array am besten gelöst ? Richtig?
4. Wozu 10 Progressbars -> für eine Kundenmeinungsumfrageauswertung sollen die Werte so wie in Excel in einem Säulen Diagramm angezeigt werden.
------------------
Ach so: noch was ich vermute mal, dass man das ganze am besten als Klasse / Objekten lösen sollte. Das ist aber für mich noch zu "viel" (bin Oldschool mit .txt Dateien unterweg). Gibt es Online eine gute Seite mit Übungen Erklärungen zur Benutzung von Klassen etc. (also schon etwas spezifischer als das immer wieder auftauchende Autofabrik Bsp. ) am Beispiel einer Kartei/ Lager oder so
codewars.com Rank: 4 kyuDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nogood“ ()
-
nogood schrieb:
warum dies nicht die beste Lösung ist. Warum kann man den Namen denn nicht immer wieder so ändern?
Me.Controls("ProgressBar1").Value = 50
. Und dann stellst Du fest - z.B. weil Dein Programm sehr groß geworden ist - dass der NameProgressBar1
nicht sonderlich aussagekräftig ist und Du willst es umbenennen inPBarCurrentVolume
(Post#2, letzter Satz). Was machst Du (sinnvollerweise)? Du gehst z.B. in den Form-Designer, wählst die ProgressBar1 an und benennst es dort einmalig um. Dadurch werden alle Stellen im Code automatisch geändert, die auf ProgressBar1 verweisen. Stand also irgendwoProgressBar1.Value = 0
, dann steht da jetztPBarCurrentVolume.Value = 0
. ABER! Die Stelle, wo DuMe.Controls("ProgressBar1").Value = 50
stehen hast, wird nicht geändert, weil VS zur Deignzeit nicht ermittelt, ob der String/Text da irgendwas mit Deinem ProgressBar zu tun hat. Und schon funktioniert Dein Programm nicht mehr, weil zur Laufzeit an dieser Codestelle ProgressBar1 nicht mehr als Objekt erkannt wird. Aber irgendwie würde es mich nicht wundern, wenn Du die Umbenennung per Suchen&Ersetzen machst - was Du niemals tun solltest. Denn Du könntest was übersehen oder ProgressBar11 versehentlich mit umbenennen. Und außerdem ist das voll die mühselige Arbeit. Nutze Deine IDE bei den Sachen, bei denen sie die helfen kann. Und deshalb: Grätsch ihr nicht mit Strings wieMe.Controls("ProgressBar1")
hinein.
nogood schrieb:
für eine Kundenmeinungsumfrageauswertung sollen die Werte so wie in Excel in einem Säulen Diagramm angezeigt werden
@VB1963: Die folgende Info ist keine Extra-Antwort wert, daher als edit: Der Originaltitel war ja so ungefähr: "Ich bräuchte etwas Hilfe bei einem kleinen Problem, Ich finde es gerade im Internet nicht." Daher mein Kommentar in Post#2.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()
-
Dieser Thread beweist sehr schön: wenn man Controls dynamisch über deren Namen ansprechen will, dass sich das gesamte Projekt bereits zu einen gewaltigen Designfehler entwickelt hat.
In diesem Fall wäre ein Chart-Control die bessere Weise gewesen...
Man kann aber auch direkt zum Control heran:
abgesehen von der besch. Benamung...Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „VB1963“ ()
-
@ VaporiZed :Toll erklärt .Danke. Ist mir selber nicht eingefallen. Aber den Moment wo Du sagt die Progressbar im Editor umzubenennen viel der Groschen.
Die LSG mit der einen Zeile sah so schön aus...
@VB1963
gerne nehme ich deinen Input auf und versuche wenn ich das ganze "Erstmal" fertig habe noch mal besser zu lösen.
Daher ja auch die Frage nach Link zu Klassen/Objekten. Wahrscheinlich sollte ich auch Dataset benutzen um die Daten besser zu organisieren und nicht stumpf .txt Dateien verwenden. Leider bin ich noch nicht so tief in der Materie drin, dass ich das mal eben so schaffe. Genau so mit Chart-Control ist wieder etwas mehr wissen nötig, Progressabrs zu missbrauchen war da einfacher. Ich kann dich aber beruhigen den Code bekommt keiner zu sehen ...codewars.com Rank: 4 kyu
-
Ähnliche Themen
-
Zugriff auf Textbox per Controls
Koala2000 - - Sonstige Problemstellungen