| | |  | Lenovo auf der Hannovermesse 31.03.-04.04.2025 | Halle 15, Stand G76, eine Pressemitteilung
|
|
Autor
|
Thema: VB.NET: For..Each mit controls (4528 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2689 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers (und Rentner)
|
erstellt am: 29. Jul. 2008 15:24 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich habe ein kleines Verständnisproblem. Ich habe auf einer Form ein Panel "pnlBottom", dieses enthält eine Reihe Buttons vom selbergemachten Typ "ALKOCIButton.ALKOCIButton". Ich möchte bei bestimmten Aktionen des Programms diese Buttons alle disablen oder enablen. Bisher habe ich für jeden einzelnen Button eine Anweisung in der Form CIbtnAddfiles.Enabled = isInteractive oder ähnliches geschrieben. Das funktioniert zwar, ist aber währende der Entwicklung lästig, solange immer mal wieder neue Buttons dazu kommen oder wegfallen. Daher möchte ich das einfach per For...Each abwickeln. Für jeden Button auf dem Panel soll dieselbe Aktion durgeführt werden: For Each Button As ALKOCIButton.ALKOCIButton In Me.pnlBottom.Controls Button.Enabled = isInteractive Next Button Das funktioniert auch, aber nach dem letzten Button erhalte ich bei Next eine Exception vom Typ "System.InvalidCastException". Was mache ich denn da falsch? Ich kann das natürlich mit Try..catch... abfangen, dann läuft zwar mein Programm richtig weiter, ich würde aber schon gerne wissen, was ich da falsch mache
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Moderator Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600
|
erstellt am: 29. Jul. 2008 15:32 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Hallo Klaus, ich gehe mal davon aus das in deinem Panel nicht nur Buttons vom Typ ALKOCIButton.ALKOCIButton enthalten sind. Wenn dies so ist musst du deine For-Each-Schleife etwas allgemeiner halten. Am allgemeinsten geht das mit der Controls-Basicklasse:
Code:
For Each oControl As System.Windows.Forms.Control In Me.pnlBottom.Controls If TypeOf oControl Is ALKOCIButton.ALKOCIButton Then oControl.Enabled = isInteractive End If Next
Kleine Frage / Anmerkung: Wenn du immer alle Buttons deines Panels deaktivieren möchtest kannst du doch gleich deinen Container deaktivieren. Dann kannst du dir die Schleife sparen:
Code: Me.pnlBottom.Enabled = isInteractive
------------------ Mfg Daniel www.MySldWorks.de - SolidWorks Api Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager

 Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 29. Jul. 2008 15:35 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Hallo, bei For Each durchläufst du jedes Element deines Containers ab. Das bedeutet, dass du jedes Element unter *.Control übergibst. Daher sind auch nur Variablen mit dem Typ Variant oder ohne zugewiesenen Typ in einer For each Next Anweisung erlaubt. In dieser musst du dann prüfen, was für ein Element es ist und im richtigen Fall übergeben. Du hast warscheinlich glück, da die ersten angesprochen die sind, die du auch ansprechen möchtest. Mehr dazu findest du aber auch in der MSDN. HTH ------------------ MFG Rick Schulz Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."
[Diese Nachricht wurde von RSchulz am 29. Jul. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2689 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ privat: ab 2024 Onshape seit 2025 SolidWorks for Makers (und Rentner)
|
erstellt am: 29. Jul. 2008 15:51 <-- editieren / zitieren --> Unities abgeben:         
Herzlichen Dank euch beiden  Mit dieser Schleife klappt das Zitat: Original erstellt von tbd: ...Kleine Frage / Anmerkung: Wenn du immer alle Buttons deines Panels deaktivieren möchtest kannst du doch gleich deinen Container deaktivieren. Dann kannst du dir die Schleife sparen:
Code: Me.pnlBottom.Enabled = isInteractive
In diesem Fall geht das nicht, da das Panel noch mehr Controls enthält, die eben nicht disabled werden sollen (Labels, Progressbar etc.) Zitat: Original erstellt von RSchulz: Hallo, bei For Each durchläufst du jedes Element deines Containers ab. Das bedeutet, dass du jedes Element unter *.Control übergibst. Daher sind auch nur Variablen mit dem Typ Variant oder ohne zugewiesenen Typ in einer For each Next Anweisung erlaubt. In dieser musst du dann prüfen, was für ein Element es ist und im richtigen Fall übergeben. Du hast warscheinlich glück, da die ersten angesprochen die sind, die du auch ansprechen möchtest. Mehr dazu findest du aber auch in der MSDN.HTH
Danke, damit habe ich auch gleich den passenden Tipp für VB6 bzw. VBA ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |