Autor
|
Thema: VB.net Steuerelemente durchlaufen (5081 mal gelesen)
|
magoh87 Mitglied
Beiträge: 7 Registriert: 22.09.2011 CATIA V5 R18 Visual Studio 2010, Visual Basic.NET
|
erstellt am: 22. Sep. 2011 16:16 <-- editieren / zitieren --> Unities abgeben:
Hi, ich hab ein Problem. Wahrscheinlich ist es total simple, doch ich komm einfach nicht drauf. Ich lese Daten aus Catia aus und kommt es zu dem problem. Die Form besteht aus einem TabControl mit mehreren Tabpages. Durch eine rekursive Schleife hat er mir alle Elemente gegeben. Nun aber will ich die namen von catia und meiner form vergleichen, jetzt schaff ich es aber nicht die werte von catia einzulesen. Kann mir da vielleicht jemand helfen? (Falls man mein Problem verstanden hat...) Danke schonmal im Vorraus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 22. Sep. 2011 18:36 <-- editieren / zitieren --> Unities abgeben: Nur für magoh87
Servus Willkommen im Forum. Bitte Sytemnfo ausfüllen. Was willst du in Catia auslesen? Mit was willst du diese vergleichen? (ggf Screenshot und Code-Schnippsel) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magoh87 Mitglied
Beiträge: 7 Registriert: 22.09.2011 CATIA V5 R18 Visual Studio 2010, Visual Basic.NET
|
erstellt am: 23. Sep. 2011 11:01 <-- editieren / zitieren --> Unities abgeben:
Hey, danke für die Antwort. Bin neu hier, deswegen weiss ich noch nicht ganz wie das hier alles funktioniert. Ich habe die Methode
Code:
Sub GetControl(ByVal ctrls As Control.ControlCollection) Dim c As Control For each c in ctrls ProcessControl(c.Controls) Next End Sub
Damit kann ich alle Steuerelemete meiner Form durchlaufen. Wie kann ich alle Steuerelemente, die ich jetzt gefunden hab, einer anderen Methode, der gleichen Klasse, übergeben? V.a. die Namen, weil ich diese auch später mit denen vergleichen, die ich in meinem CATIA Program habe. Der CATIA Aufruf mit deren Parts und dessen Eigenschaften hab ich. Ich will jetzt die Namen der Parts, mit den Namen der Controls vergleichen und wenn eine Übereinstimmung gefunden ist soll der Wert oder Parameter von CATIA in das jeweilige Control eingefügt werden. Nur das schaff ich nicht... entweder greift es dann nur auf die Grundform, oder auf die Anzahl der TabPages. Und alles einzeln ansprechen wär ein immenser Aufwand, weil ich über 300 controls hab. ??? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 23. Sep. 2011 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für magoh87
Ich sehe keinen Fehler in der Methode. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magoh87 Mitglied
Beiträge: 7 Registriert: 22.09.2011 CATIA V5 R18 Visual Studio 2010, Visual Basic.NET
|
erstellt am: 23. Sep. 2011 14:05 <-- editieren / zitieren --> Unities abgeben:
Ja, an dem code is eigentlich auch nix falsch... Aber was ist hier dran falsch? Code: Public Sub Para_Get(ByVal ctrls As Control.ControlCollection, ByVal writePara As String, ByVal setPara As String) catpart = CATIA.ActiveDocument.Part Select Case setPara'Ansprechen des Parameterset für update '. '. '. End Select
params = paramset.AllParameters On Error Resume Next Dim c As Control For i As Integer = 0 To params.Count ' ' pName ermitteln For Each c In ctrls For j As Integer = 0 To ctrls.Count If c.Controls.Item(j).Name.ToString = pName Then
Select Case writePara 'controls werden gelesen und/oder verändert End Select End If Next Para_Get(c.Controls, writePara, setPara) Next Next End Sub
Jetzt sagt er mir ich hab nur 9 steuerelemente wenn ich ctrls.count mache.. sollten aber um die 400 sein. er will einfach nicht in mein tabcontrol rein umd da dessen controls zu nehmen. was mach ich denn falsch?? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 23. Sep. 2011 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für magoh87
Hallo, wie groß ist den i bzw. j? Wenn du die Anzahl der Params oder ctrls in der Schleife änderst (ich weiß ja nicht, was Para_Get so treibt), ändert sich params.Count bzw. ctrls.Count nicht mit oder besser gesagt die Schleife interessiert sich nicht für die Änderung und wird beim Ursprünglichen Wert beendet. Jedenfalls ist das in VB6 so. Ist das vielleicht dein Problem? Gruß ------------------ tomtom1972 [Diese Nachricht wurde von tomtom1972 am 23. Sep. 2011 editiert.] [Diese Nachricht wurde von tomtom1972 am 23. Sep. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magoh87 Mitglied
Beiträge: 7 Registriert: 22.09.2011 CATIA V5 R18 Visual Studio 2010, Visual Basic.NET
|
erstellt am: 23. Sep. 2011 14:43 <-- editieren / zitieren --> Unities abgeben:
Hey, danke für die Antwort. params und ctrls sollten sich eigentlich nicht ändern. params tut es auch nicht und ctrls ist ja eine auflistung meiner steuerelemente in meiner form die sich eigentlich auch nciht ändern sollte. para_get ist eine methode, die zuerst alle parameter aus catia holt und diese dann in einer form anzeigt. das ist dann quasi die grundform. der user hat dann die möglichkeit die werde zu ändern und damit wird dann das catiapart aktualisiert, dementsprechend verändert. liegt das problem vielleicht da dran, dass ich ein tabcontrol drin hab und der da nicht reinhüpft? brauch ich da vielleicht noch ne schleife. also in vba ist das auch kein problem, nur mit vb.net tu ich mri da echt schwer... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Sep. 2011 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für magoh87
Servus Was mich an deinem Code wundert (obwohl ich noch nicht so ganz durchsteige): - ist params eine Collection oder ein Array (Collections fangen mit 1 an) - ist unter dem Object ctrls (bzw den einzelnen Items wieder eine Collection von Controls)? - fängt bei dieser Control-Collection der Zähler wieder bei 1 an? - warum führst du die Para_Get rekursiv aus? Ist deine Form so weit verschachtelt? Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magoh87 Mitglied
Beiträge: 7 Registriert: 22.09.2011 CATIA V5 R18 Visual Studio 2010, Visual Basic.NET
|
erstellt am: 27. Sep. 2011 11:49 <-- editieren / zitieren --> Unities abgeben:
Hey, danke für die Antwort, ich hab das Problem allerdings gefunden. Es war nicht an CATIA gelegen, oder vielleicht teilweise schon, sondern war es da dran gelegen, dass wenn ich durch alle Controls meiner Form laufen wollte, es nicht in die einzelnen GroupBoxs gesprungen ist. Ich musste jetzt, vielleicht auch als Notlösung, eine Schleife durch jede GroupBox laufen in der sich z.B. eine TextBox ändert. Ziemlich nervig, denn ich hab um die 40Stück aber jetzt funktionierts endlich... Oder hat vielleicht jemand eine bessere Lösung? Oder weiss vielleicht jemand woran das lag? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |