| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: ComboBox aktualisieren (3691 mal gelesen)
|
TM Popp Mitglied Tischlermeister

 Beiträge: 51 Registriert: 20.11.2003
|
erstellt am: 01. Sep. 2008 20:26 <-- editieren / zitieren --> Unities abgeben:         
Hallo Zusammen! ich hab hier ein kleines Problem... Gerade habe ich eine UserForm erstellt mit dem ich durch verschiedene Button entsprechende Layer erzeugen kann. Darüber hinaus befindet sich im gleichen Formular eine Combobox die alle vorhandenen Layer zeigt. Leider ist es mir aber nicht gelungen die Box so zu konfigurieren, dass sie alle Layer, einschließlich der neu erstellten anzeigt. Dazu müsste die Anzeige ja aktualisiert werden, was trotz einiger Versuche irgendwie nicht gelingen will. Für eure Hilfe wäre ich sehr dankbar!
Viele Grüße
------------------ TM Popp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2862 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2023 Plateia, Canalis Visual Basic
|
erstellt am: 02. Sep. 2008 00:45 <-- editieren / zitieren --> Unities abgeben:          Nur für TM Popp
|
MWN Mitglied Dipl.-Ing.
 
 Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 02. Sep. 2008 07:24 <-- editieren / zitieren --> Unities abgeben:          Nur für TM Popp
|
TM Popp Mitglied Tischlermeister

 Beiträge: 51 Registriert: 20.11.2003 AutoCad 2020 unter Windows 10
|
erstellt am: 02. Sep. 2008 21:54 <-- editieren / zitieren --> Unities abgeben:         
Hallo Klaus Hallo Tobias, leider funktioniert der Befehl ‘ComboBox1.items.Add ("Layername")’ unter AutoCad 2002 nicht. Hier wird die Fehlermeldung ‘Methode oder Datenbankobjekt nicht gefunden’ ausgegeben. Deshalb hier einmal der Code mit dem die Abfragen aufgebaut sind: Public Sub CreateLines() Dim VarPoint As Variant Dim StartPt(2) As Double Dim Endpt(2) As Double Dim NewLine As AcadLine On Local Error Resume Next Set AllLayers = Layers LineSetupFrm.ComboBox1.Clear For Each l In AllLayers If InStr(1, l.Name, "|") = 0 Then LineSetupFrm.ComboBox1.AddItem l.Name End If Next LineSetupFrm.ComboBox1.Text = ActiveLayer.Name Set AllLStyles = Linetypes LineSetupFrm.ComboBox2.Clear For Each l In AllLStyles LineSetupFrm.ComboBox2.AddItem l.Name Next LineSetupFrm.ComboBox2.Text = ActiveLinetype.Name LineSetupFrm.Show If LineSetupFrm.OK = False Then Exit Sub Do Prompt = "Wählen Sie den Startpunkt des Linienzuges:" VarPoint = Empty VarPoint = Utility.GetPoint(, vbCrLf & Prompt) If TypeName(VarPoint) = "Double()" Then StartPt(0) = VarPoint(0) StartPt(1) = VarPoint(1) StartPt(2) = VarPoint(2) Do Prompt = "Wählen Sie den nächsten Punkt des Linienzuges:" VarPoint = Empty VarPoint = Utility.GetPoint(StartPt, vbCrLf & Prompt) If TypeName(VarPoint) = "Double()" Then Endpt(0) = VarPoint(0) Endpt(1) = VarPoint(1) Endpt(2) = VarPoint(2) Set NewLine = ModelSpace.AddLine(StartPt, Endpt) NewLine.Color = LineSetupFrm.GetColorIndex(LineSetupFrm.ImageCombo1.SelectedItem.Index) NewLine.Layer = LineSetupFrm.ComboBox1.Text NewLine.Linetype = LineSetupFrm.ComboBox2.Text NewLine.LinetypeScale = Utility.DistanceToReal(LineSetupFrm.Text1.Text, acDefaultUnits) NewLine.Lineweight = LineSetupFrm.GetLWIndex(LineSetupFrm.ImageCombo2.SelectedItem.Index) NewLine.Thickness = Utility.DistanceToReal(LineSetupFrm.Text2.Text, acDefaultUnits) StartPt(0) = Endpt(0) StartPt(1) = Endpt(1) StartPt(2) = Endpt(2) Else Exit Do End If Loop Else Exit Do End If Loop SaveSetting "BspLine", "Position", "Left", LineSetupFrm.Left SaveSetting "BspLine", "Position", "Top", LineSetupFrm.top Unload LineSetupFrm End Sub Dazu kommen noch die einzelnen Button um die Layer zu erzeugen. Hier ein exemplarischer Code: Private Sub CommandButton8_Click() Dim NewLayer As AcadLayer On Local Error Resume Next Set NewLayer = ThisDrawing.Layers.Add("Volllinie 0.25") Set AcadLayer = ThisDrawing.Layers("Volllinie 0.25") AcadLayer.Color = 127 Set AcadLayer = ThisDrawing.Layers("Volllinie 0.25") AcadLayer.Lineweight = acLnWt025 Set ActLayer = ThisDrawing.Layers("Volllinie 0.25") ActLayer.Freeze = False ThisDrawing.ActiveLayer = ActLayer End Sub Für eure Hilfe wäre ich sehr dankbar!
Viele Grüße
------------------ TM Popp 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: 03. Sep. 2008 10:15 <-- editieren / zitieren --> Unities abgeben:          Nur für TM Popp
Hallo TM Popp, zunächst eine Anmerkung. Hättest du dir kurz die Netiquette des Forums durchgelesen und dich an den Hinweis gehalten einen Beitrag mit der Programmversion (in deinem Fall VBA) deutlich zu kennzeichnen, hätten Missverständnisse vermieden werden können. Nun aber zu deiner Frage: Die benötigten Methoden der ComboBox sind .AddItem für das Hinzufügen von Einträgen und .List(Index) für das Abfragen einzelner Einträge. Ich habe zwei gute Beiträge gefunden welche dir bei deinem Problem helfen können. Es handelt sich dabei zwar um Beispiele mit einer ListBox, jedoch lassen diese sich 1 zu 1 für eine ComboBox anwenden. Dazu muss du die ListBox Instanz "List1" einfach durch deine ComboBox Instanz "LineSetupFrm.ComboBox1" ersetzen. Hier die Beispiele für Eintrag suchen und löschen und Einträge editieren. Hier noch ein Link mit vielen Tipps und Tricks rund um die ComboBox. Ich hoffe diese Informationen helfen dir weiter. ------------------ Mfg Daniel www.MySldWorks.de - SolidWorks Api Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2862 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2023 Plateia, Canalis Visual Basic
|
erstellt am: 03. Sep. 2008 22:08 <-- editieren / zitieren --> Unities abgeben:          Nur für TM Popp
Hallo TM Popp, so ganz ist mir noch nicht klar wo das Problem liegt. Bekommst Du die Layer nicht angezeigt? Oder bekommst Du einen Fehler beim Aufruf von .additem ? Eventuell liegt es ja daran, dass Du unter Extras Verweise die Microsft Forms nicht angekreuzt hast (siehe JPG) Beiliegend noch eine Zip mit einer Beispiel dvb zum Anzeigen der Layer in Combo und Listbox. Vielleicht hilft es was, Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TM Popp Mitglied Tischlermeister

 Beiträge: 51 Registriert: 20.11.2003
|
erstellt am: 04. Sep. 2008 00:01 <-- editieren / zitieren --> Unities abgeben:         
Hallo Zusammen! mein Problem besteht darin, dass die neu erstellten Layer (Bsp.:Volllinie, schmal 0,25) erst nachdem ich die UserForm einmal geschlossen und wieder geöffnet habe unter der Rubrik 'Layer' angezeigt werden. Eine aktalisierung der Combobox findet bei mir nicht statt. Ich werde das Beispielprojekt von Klaus morgen mal ausprobieren um meinen Fehler auf die Spur zu kommen! Ich werde dann Rückmeldung geben. Bis dahin Dirk ------------------ TM Popp 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: 04. Sep. 2008 07:53 <-- editieren / zitieren --> Unities abgeben:          Nur für TM Popp
Guten Morgen Dirk, du muss dich in ein Ereignis einklinken, in welchem die einzelnen Layer erzeugt werden. Von alleine geht in der Programmierung leider auch nichts, du muss schon selbst festlegen wann was passiert. Wenn ich dein Code so betrachte müsste dies das Click-Ereignis des Buttons CommandButton8 sein. Vom Ablauf könnte deine Aufgabe ungefähr so gelöst werden:
Code: Private Sub CommandButton8_Click() 'Layer erzeugen ... 'Prüfen ob dieser Layer schon in der 'ComboBox aufgelistet ist ... 'Neuen Layer, wenn nicht vorhanden 'in die ComboBox einfügen End Sub
------------------ Mfg Daniel www.MySldWorks.de - SolidWorks Api Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TM Popp Mitglied Tischlermeister

 Beiträge: 51 Registriert: 20.11.2003
|
erstellt am: 04. Sep. 2008 21:03 <-- editieren / zitieren --> Unities abgeben:         
Hallo Zusammen! Geschafft! Ich habe folgenden Code an den Button angehängt: ComboBox1.Clear For Each ActLayer In ThisDrawing.Layers ComboBox1.AddItem ActLayer.Name Next End Sub und siehe da es funktioniert. Wenn ich nun noch hinbekomme, dass nach dem der Eintrag gemacht wurde der aktuelle Layer in der Box 'gesetzt' ist, wäre es dann perfekt! Habt ihr ne Idee? Viele Grüße Dirk
------------------ TM Popp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 05. Sep. 2008 11:53 <-- editieren / zitieren --> Unities abgeben:          Nur für TM Popp
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten

 Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD bis 2013 Arcibem Internet-Startseite: http://www.archi.de
|
erstellt am: 05. Sep. 2008 12:12 <-- editieren / zitieren --> Unities abgeben:          Nur für TM Popp
|
TM Popp Mitglied Tischlermeister

 Beiträge: 51 Registriert: 20.11.2003
|
erstellt am: 06. Sep. 2008 11:51 <-- editieren / zitieren --> Unities abgeben:         
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 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
|
erstellt am: 09. Sep. 2008 13:04 <-- editieren / zitieren --> Unities abgeben:          Nur für TM Popp
Aber einfacher (und eventuell performanter, ich weiß nicht, wie flott VBA bei Autocad ist und wieviele Layer du damit handeln willst) wäre es gewesen, wenn du dem Vorschlag von Daniel gefolgt wärest und beim Erzeugen des Layer diesen einfach mit LineSetupFrm.ComboBox1.AddItem "<Name des Layers>" der Combobox hinzugefügt hättest anstatt die Combobox komplett zu leeren und neu zu befüllen. Aber egal, hauptsache, es funzt und du bist zufrieden  ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |