| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Probleme mit SelStart (1348 mal gelesen)
|
Einstein Mitglied Zerspanungsmechaniker-Drehtechnik
Beiträge: 94 Registriert: 20.02.2005
|
erstellt am: 13. Aug. 2007 20:10 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum! Ich hab eine Frage bei der ich mir nicht sicher bin, ob ich es eventuell falsch programmiert habe oder VBA bzw. MSForms einen Fehler beinhalten. Es geht um folgendes: Bei einem UserForm (siehe Bild) erstelle ich zur Laufzeit des Codes auf einer Multipage mehrere Pages ("Page1", "Page2", ...). In diesen Pages erstelle ich wiederum je eine TextBox ("TextBox1", "TextBox2", ...) und stelle deren Eigenschaften ein. Unter anderem auch die Eigenschaft "SelStart" welche ich mit dem Wert "0" belege. (Damit der Text, den ich der TextBox bereits zugewiesen habe, von oben angezeigt wird.) Mein Problem: Wenn ich das UserForm starte wird in der ersten Page in der TextBox ein Rollbalken angezeigt. Als nächstes klicke ich der Reihe nach (von links nach rechts) alle Pages an. Dabei wird in jeder TextBox ein Rollbalken angezeigt. ...Und jetzt die große Sch...: Wenn ich nach dem Start des UserForms als erstes auf die ganz rechte Page klicke ("Info...") und dann der Reihe nach von rechts nach links wird der Rollbalken bei den beiden Pages "Deinstallation" und "Kontakt" nicht angezeigt!? WARUM??? Hier der Code, der zur Laufzeit die Pages und die TextBoxes erstellt: For I1 = 1 To UBound(LineMsg) If InStr(1, LineMsg(I1), FileID(1), vbTextCompare) And Len(LineMsg(I1)) > Len(FileID(1)) Then I2 = I2 + 1 Set ControlObject = MultiPage1.Add("Page" & CStr(I2), Mid(LineMsg(I1), Len(FileID(1)) + 1, Len(LineMsg(I1)) - Len(FileID(1)) + 1)) Set ControlObject = MultiPage1.Pages("Page" & CStr(I2)).Controls.Add("Forms.TextBox.1", "TextBox" & CStr(I2)) For I3 = I1 + 1 To UBound(LineMsg) If InStr(1, LineMsg(I3), FileID(2), vbTextCompare) Then I1 = I3: Exit For frm_appendix.Controls("TextBox" & CStr(I2)).text = frm_appendix.Controls("TextBox" & CStr(I2)).text & LineMsg(I3) & vbCr Next I3 frm_appendix.Controls("TextBox" & CStr(I2)).Height = 77 frm_appendix.Controls("TextBox" & CStr(I2)).Left = 4.5 frm_appendix.Controls("TextBox" & CStr(I2)).top = 5 frm_appendix.Controls("TextBox" & CStr(I2)).Width = 312 frm_appendix.Controls("TextBox" & CStr(I2)).MultiLine = True frm_appendix.Controls("TextBox" & CStr(I2)).ScrollBars = fmScrollBarsBoth frm_appendix.Controls("TextBox" & CStr(I2)).EnterKeyBehavior = False frm_appendix.Controls("TextBox" & CStr(I2)).SelStart = 0 frm_appendix.Controls("TextBox" & CStr(I2)).Locked = True If I2 = 1 Then frm_appendix!TextBox1.SetFocus End If Next I1
------------------ MfG A. Einstein P.S. Rechtschreibefehler sind gewollt und dienen der allgemeinen Belustigung! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 13. Aug. 2007 21:09 <-- editieren / zitieren --> Unities abgeben: Nur für Einstein
|
Einstein Mitglied Zerspanungsmechaniker-Drehtechnik
Beiträge: 94 Registriert: 20.02.2005
|
erstellt am: 13. Aug. 2007 23:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten1210, ich hab mal das komplette Tool hochgeladen. Du musst es aber installieren damit du zu der besagten UserForm gelangst. (in der Datei "Installation.txt" findest du die Installationsanleitung) Da kannst du mir gleich ein Feedback zu dem, fast fertig gestellten, Tool geben, Ok!?
------------------ MfG A. Einstein P.S. Rechtschreibefehler sind gewollt und dienen der allgemeinen Belustigung! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 14. Aug. 2007 19:29 <-- editieren / zitieren --> Unities abgeben: Nur für Einstein
Hallo Einstein, Wo der Fehler liegt, kann ich dir leider nicht sagen. Aber für mich stellt sich die Frage, warum du die Multipages während der Laufzeit generierst. Probier doch mal aus, wenn du die Seiten während des Entwurfs zusammenstellst und nur die Textbox zur Laufzeit füllst. Die Texte sind auf jeden Fall komplett vorhanden. Das kannst du überprüfen, wenn du den Text mal per Maus markierst und die Markierung weiter runter ziehst. Dann sind auch die Scrollbars wieder sichtbar. Ansonsten ist es ein nettes Tool, besonders die Animation des Formulars bei der Berechnung. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Einstein Mitglied Zerspanungsmechaniker-Drehtechnik
Beiträge: 94 Registriert: 20.02.2005
|
erstellt am: 16. Aug. 2007 16:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten1210, ich hab noch mal eine ganz andere Frage: Wenn man das ganze Tool mit der Maus in der Titelleiste verschiebt dann bleibt diese neue Position nicht erhalten, nachdem man ein "Objekt gewählt" hat. Kannst du mir sagen wie man das programmieren muss, damit diese Position erhalten bleibt? ------------------ MfG A. Einstein P.S. Rechtschreibefehler sind gewollt und dienen der allgemeinen Belustigung! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 16. Aug. 2007 18:09 <-- editieren / zitieren --> Unities abgeben: Nur für Einstein
Hi, Es gibt bei den Formularen eine Eigenschaft, die sich "Startupposition" nennt. Diese kannst du auf manuell stellen und Koordinaten mitgeben (Left und Top). Diese müsstest du dann bei Schließen deiner Form speichern und beim nächsten Aufruf wieder anwenden. Dann sollte es klappen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dobatec Mitglied st.gepr.Baut./Stud. W.Inf.
Beiträge: 34 Registriert: 23.03.2006 AutoCad2006,AcadBau2000,ADT3.0, AMD64.3800
|
erstellt am: 16. Aug. 2007 22:31 <-- editieren / zitieren --> Unities abgeben: Nur für Einstein
Hallo Einstein, dein Problem liegt evtl. im Steuerelement MultiPage. Ich hatte vor ca. zwei Wochen noch ein ähnliches Problem. Bei mir war es ein TreeView, welches ich befüllt hatte und das mir dann nur Schrott angezeigt hat sobald ich auf dessen Page gewechselt habe. Ich hab dann das TreeView mal frei im Form plaziert und alles funktionierte. Daher werde ich in Zukunft solche Dinge wie TextBox, TreeView u.ä. nur dann mit Daten füllen, wenn die jeweilig dazugehörende Page auch aktiv wird. Probiers einfach mal aus und plaziere deine TextBoxes nicht auf den Pages. Gruß doba
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 17. Aug. 2007 20:27 <-- editieren / zitieren --> Unities abgeben: Nur für Einstein
Hallo Albert , da hast du ein schönes Programm gebastelt. Hut ab. Vor allem die Installationsfunktion und wie Carsten schon schrieb die Animation bei der Berechnung. :top ich hab mal ein paar Zeilen geändert. Jetzt klappt es auch mit der Scrollbar.
Code: ... On Error GoTo 0: Err.Clear For I1 = 1 To UBound(LineMsg) If InStr(1, LineMsg(I1), FileID(1), vbTextCompare) And Len(LineMsg(I1)) > Len(FileID(1)) Then I2 = I2 + 1 Set ControlObject = MultiPage1.Add("Page" & CStr(I2), Mid(LineMsg(I1), Len(FileID(1)) + 1, Len(LineMsg(I1)) - Len(FileID(1)) + 1)) '''' Neue Seite aktivieren sonst kann der Focus nicht aufs Textfeld gesetzt werden Me.MultiPage1.Value = Me.MultiPage1.Pages.Count - 1 Set ControlObject = MultiPage1.Pages("Page" & CStr(I2)).Controls.Add("Forms.TextBox.1", "TextBox" & CStr(I2)) '''' Focus ins Textfeld, dann werden auch die Scrollbars richtig "brechnet" ControlObject.SetFocus For I3 = I1 + 1 To UBound(LineMsg) If InStr(1, LineMsg(I3), FileID(2), vbTextCompare) Then I1 = I3: Exit For frm_appendix.Controls("TextBox" & CStr(I2)).text = frm_appendix.Controls("TextBox" & CStr(I2)).text & LineMsg(I3) & vbCr Next I3 Me.Controls("TextBox" & CStr(I2)).Height = 77 Me.Controls("TextBox" & CStr(I2)).Left = 4.5 Me.Controls("TextBox" & CStr(I2)).top = 5 Me.Controls("TextBox" & CStr(I2)).Width = 312 Me.Controls("TextBox" & CStr(I2)).MultiLine = True Me.Controls("TextBox" & CStr(I2)).ScrollBars = fmScrollBarsBoth Me.Controls("TextBox" & CStr(I2)).EnterKeyBehavior = False Me.Controls("TextBox" & CStr(I2)).SelStart = 0 Me.Controls("TextBox" & CStr(I2)).Locked = True '''' ersetzt durch siehe oben 'If I2 = 1 Then frm_appendix!TextBox1.SetFocus End If Next I1 '''' Erste Seite aktivieren Me.MultiPage1.Value = 0 End Sub
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Einstein Mitglied Zerspanungsmechaniker-Drehtechnik
Beiträge: 94 Registriert: 20.02.2005
|
erstellt am: 19. Aug. 2007 19:15 <-- editieren / zitieren --> Unities abgeben:
@ Stelli1, vielen Dank für deine Aw! Ich hab's natürlich gleich ausprobiert ...und sieh da - es funktioniert. Stundenlang hab ich am Code gebastelt und bin zu keiner Lösung gekommen und bei dir klappt das - Hut ab! Hast du beruflich etwas mit Visual Basic zu tun oder einen entsprechenden Lehrgang besucht? Eine kleine Frage noch zum Schluss: Ich erwähnte bereits das Problem, dass beim beenden des "Selection Set" (Objekt wählen), das UserForm immer in die Mitte des Bildschirm platziert wird, auch wenn das UserForm zuvor verschoben wurde. Hast du dafür eventuell auch noch ne Lösung, um die zuvor gewählte Position wieder zu "finden"?
------------------ MfG A. Einstein P.S. Rechtschreibefehler sind gewollt und dienen der allgemeinen Belustigung! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 20. Aug. 2007 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für Einstein
Hallo, du musst dir die Position beim ausblenden des Formulars speichern
Code: Private Sub CommandButton3_Click() lngLeft = Me.Left lngTop = Me.top frm_AutoCAD_MassCalculation.Hide: SelectingObjectVolume(2) = 0 Set SelectionSet = ThisDrawing.SelectionSets.Add("UserChoice_SelSet") ....
und die Werte wieder zurückschreiben wenn das Formular wieder eingeblendet wird
Code: Private Sub UserForm_Activate() If lngLeft > 0 Or lngTop > 0 Then Me.Left = lngLeft Me.top = lngTop End If End Sub
dazu im Deklarationsteil die beiden Variablen deklarieren
Code: Option Explicit ..... Dim Interface As AcadEntity Dim lngLeft As Long Dim lngTop As Long
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |