Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  VB.NET: For..Each mit controls

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
Autor Thema:  VB.NET: For..Each mit controls (4406 mal gelesen)
KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles... i.R.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2678
Registriert: 06.11.2000

erstellt am: 29. Jul. 2008 15:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von tbd an!   Senden Sie eine Private Message an tbd  Schreiben Sie einen Gästebucheintrag für tbd

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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.

HTHHope this helps (Hoffe, es hilft weiter)

------------------
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.



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2678
Registriert: 06.11.2000

erstellt am: 29. Jul. 2008 15:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz