| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: ComboBox: ~500 Einträge hinzufügen » Best Practice? (839 mal gelesen)
|
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 11. Jul. 2020 10:28 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe mittels VB ein Add-In erstellt, welches beim Start vom Inventor geladen wird. Dieses fügt unter anderem eine Combobox einem eigenen, neuen Panel hinzu, was soweit gut klappt. Jetzt müsste ich in diese Combobox ungefähr 500 Einträge hinzufügen. Deshalb wollte ich fragen, wie ich das am Besten anstelle, um in Bezug auf Performanz keine Probleme zu bekommen!? Wie befüllt man idealerweise eine Combobox mit so vielen Einträgen und vor allem zu welchem Zeitpunkt? Wie wird das IV-Intern bei den Materials und den RenderStyles gehandhabt? Vielen Dank im Voraus für Eure Antworten. Danke und Grüße MB-Ing.
------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 13. Jul. 2020 12:00 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Hallo Die ComboBox hat nur die AddItem-Methode, die nur einzelne Strings akzeptiert. Daher wirst du jedes Item in einer Schleife einzeln einfügen müssen. Füllen sollte man sie beim Laden des AddIns. Da merkt es der User mM am wemigsten. Beim ersten Öffnen zu füllen, erzeugt möglicherweise eine unschöne Wartepause. 500 Enträge halte ich für einen Usability-GAU. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 13. Jul. 2020 13:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, vielen Dank für Deine Antwort. Wie lädt Inventor intern die Werkstoffe und Darstellungsarten? Sind ja auch beides Comboboxen mit vielen Einträgen... Oder täusche ich mich da? Kann man das befüllen der Combobox asynchron implementieren? (Async & Await!?) Ich bin für jeden Input dankbar Vielen Dank und Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 14. Jul. 2020 15:21 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Hallo Wie Inventor intern arbeitet hat mir Autodesk nicht verraten. Gefragt hab ich öfter schon. Aber ich vermute es ist wieder einer der vielen internen Caches, die irgendwo vorgehalten werden und an die wir Sterblichen niemals heran dürfen. Hast du mal probiert wie lange das Füllen mit 500 Einträgen dauert? Ich denke wir reden hier von unter 1 Sekunde. Da machen Gedanken über asynchrones Laden kaum Sinn. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 14. Jul. 2020 17:04 <-- editieren / zitieren --> Unities abgeben:
Hi Ralf, vielen Dank für Deine Antwort und danke, dass Du Dir Zeit hierfür nimmst. Das weiß ich sehr zu schätzen. Habe es zu Testzwecken in eigene Klasse ausgelagert, die aktuell nur 120 Einträge umfasst. Diese sind sehr schnell da, aber ich habe es nicht gemessen. Asynchron kam mir in den Sinn wegen Deiner Aussage: "500 Einträge halte ich für einen Usability-GAU." Länger als das Laden der Gewindetabelle kann es nicht dauern Wäre es zwecks der Erweiterbarkeit der Liste sinnvoll diese in eine externe Datei zu packen? (Ggf. eine JSON-Datei) Ich sehe darin eher Performanzeinbußen und mögliche Fehlerquellen... Die Liste ändert sich im Allgemeinen eher selten, also vielleicht ein Eintrag im Jahr und selten kommt ein Eintrag hinzu. Danke und Grüße MB-Ing.
------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 15. Jul. 2020 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Hallo Mit Usability meinte ich eigentlich eher das der User die Liste ausklappen und durchscrollen muss. 500 Einträge, vor allem wenn man nicht genau weiß wonach man sucht, können sehr lang werden. Ich sehe da immer die Gefahr, dass der User irgendwas aus dem zu Beginn sichtbaren Bereich der Liste auswählt. Auslagern in eine Datei kann sowohl für eigene Anpassungen je Arbeitsplatz, aber auch für einfachere Aktualisierungen der Liste Sinn machen. Ich bin dafür. Performanceeinbußen sehe ich da keine. Die Liste wird beim Laden einmal je Sitzung gelesen. Das dürfte für den User nicht spürbar sein. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 16. Jul. 2020 07:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, danke für Deinen Beitrag. Mit den 500 Einträgen hast Du natürlich absolut Recht. Aber in dem Fall sind es Oberflächen, die numerisch geordnet sind und der Anwender vorher weiß, welche er braucht. Jedoch kann es sein, dass er für die Oberfläche XY bis ganz unten scrollen muss Gibt es eine Funktion, bzw. einen ComboBox-Typ, bei dem man tippen kann und die passenden Treffer simultan eingegrenzt werden? (Bisschen wie IntelliSense...?) Das mit der Auslagerung der Datei wundert mich bisschen Dachte, dass das eher mehr Nachteile bringt... In welchem Format würdest Du es ablegen? JSON würde mir hier auf die Schnelle einfallen... Wenn das Einlesen keine signifikanten Performanzeinbußen mit sich zieht, wäre es schon toll, wenn man die Liste einfach von außen ohne Re-Build der Solution erweitern könnte. Wir verfolgen eh einen Art Continuous Delivery-Ansatz per Deployment-Tool, so dass unsere Sachen unmittelbar weltweit ausgerollt werden können. Mit dem Combobox.OnSelect-Event überschreibe ich dann gleich den Renderstyle, so dass die ausgewählte Oberfläche ad hoc auch graphisch dargestellt wird. Gibt es eigentlich ein OnChange-Event für die native Renderstyle-Liste im Inventor? Vielen Dank im Voraus für Eure Unterstützung. Danke und Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 17. Jul. 2020 19:53 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Hallo Genau das "Scrollen bis zum Ende" meinte ich. Die ComboBox im Inventor hat die AutoComplete-Eigenschaft leider nicht. Möglich wäre z.B. zwei Comboboxen zu nutzen, wo die erste eine grobe Auswahl darstellt und bei Selektion in der zweiten eine entsprechend gefilterte Liste gezeigt wird. Oder, falls möglich/vorhanden über ein iPropertie bereits vordefiniert wird, welche Auswahl an Oberflächen zu Verfügung steht. Also wenn z.B. eine Unterscheidung Holz, Metall, Stein in dem iProp erfolgt, ist bei Metall schonmal klar, dass "lasiert mit Leinöl" als Oberfläche ausfällt. Bitte das Beispiel nicht zerpflücken, es ist nur zum Verdeutlichen gedacht. Um bei Aktualisierungen wenigstens eine Versionsinfo zu haben, würde ich etwas strukturiertes wie xml oder json nehmen. Google spuckt dir sicher fertige Funktionen (z.B. xml2array) zum Einlesen aus. Nachteile sehe ich im Auslagern keine relevanten. Außer das jeder mit ausreichend Zugriffsrechten daran herumfummeln kann. Das sollte mit entsprechenden Zugriffsrechten beschränkt oder mit der Androhung von Schlägen verhindert werden. Die Zeit für's Einlesen wird bei 500 Zeilen für dich kaum wahrnehmbar sein. Ich schätz 1-2 Sekunden, höchstens. Ein OnSelect-Event gibt es nicht. Schau mal, ob dir das StyleEvents.OnActivateStyle-Event weiterhilft. In der API-Hilfe steht "Style Events are currently under development and are not supported. They are provided as-is and may be used at your own risk." Keine Ahnung ob, das schon seit Inventor 12 (nicht 2012) da drin steht, funktioniert jedenfalls derzeit. Alternativ das TransactionEvents.OnCommit-Event ansehen. Aha, weltweit ausrollen. Ohne lukrativen Beratervertrag sag ich nix mehr. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 17. Jul. 2020 20:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, wirklich vielen herzlichen Dank für Deine ausführliche Antwort und die Zeit, die Du Dir hierfür nimmst. Weltweit ausrollen, heißt im Endeffekt bei unseren Standorten, die die große Ehre haben mit Inventor arbeiten zu dürfen... . Geld verdienen wir damit nicht, sondern mit der Entwicklung und Konstruktion von elektronischen und mechanischen Komponenten. Deine Anregungen sind sehr spannend und hören sich super an. Ich habe zwei Wochen Urlaub und werde es dann prüfen, aber ich wollte mich schon vorab bedanken. Wie findet man am besten heraus, welche Events alle von Inventor gefeiert werden? In der API Hilfe? Vielen Dank und beste Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 17. Jul. 2020 21:28 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
|
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 10. Aug. 2020 08:09 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von rkauskh: HalloSchönen Urlaub schonmal Zu den Events, such mal nach Developertools und EventWatcher. Inventor liefert das Tool mit, es muss nur separat installiert werden.
Hallo Ralf, vielen herzlichen Dank für Deine großartige Unterstützung! Der Eventwatcher hat mir den Event gezeigt: StyleEvents.OnActivateStyle DocumentObject: Bauteil1 (PartDocument) Style: Herbert (RenderStyle) Context is Nothing BeforeOrAfter: kBefore HandlingCode: kEventNotHandled StyleEvents.OnActivateStyle DocumentObject: Bauteil1 (PartDocument) Style: Gustav (RenderStyle) Context is Nothing BeforeOrAfter: kAfter HandlingCode: kEventNotHandled Ich habe anschließend folgenden Code implementiert: Private WithEvents SurfaceRenderStyleEvent As StyleEvents … SurfaceRenderStyleEvent = g_inventorApplication.StyleEvents … SurfaceRenderStyleEvent = Nothing ... Private Sub SurfaceRenderStyleEvent_OnActivateStyle() Handles SurfaceRenderStyleEvent.OnActivateStyle System.Windows.Forms.MessageBox.Show("Funzt") End Sub Es klappt soweit alles, aber er bringt die Meldung logischerweise 2-mal, da der Event ja EventTimingEnum before & after hat... Wieso kann ich in der Methode keine Argumente übermittelt bekommen? Bsp.: Private Sub SurfaceRenderStyleEvent_OnActivateStyle(BeforeOrAfter As Inventor.EventTimingEnum) Handles SurfaceRenderStyleEvent.OnActivateStyle » Fehler: Method cannot handle event because they do not have a compatible signature Benötige ich hier: SurfaceRenderStyleEvent = g_inventorApplication.StyleEvents Ebenfalls Argumente??? Danke und Grüße Mb-Ing ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 10. Aug. 2020 09:49 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von mb-ing:
Hallo Ralf, vielen herzlichen Dank für Deine großartige Unterstützung! Der Eventwatcher hat mir den Event gezeigt: StyleEvents.OnActivateStyle DocumentObject: Bauteil1 (PartDocument) Style: Herbert (RenderStyle) Context is Nothing BeforeOrAfter: kBefore HandlingCode: kEventNotHandled StyleEvents.OnActivateStyle DocumentObject: Bauteil1 (PartDocument) Style: Gustav (RenderStyle) Context is Nothing BeforeOrAfter: kAfter HandlingCode: kEventNotHandled Ich habe anschließend folgenden Code implementiert: Private WithEvents SurfaceRenderStyleEvent As StyleEvents … SurfaceRenderStyleEvent = g_inventorApplication.StyleEvents … SurfaceRenderStyleEvent = Nothing ... Private Sub SurfaceRenderStyleEvent_OnActivateStyle() Handles SurfaceRenderStyleEvent.OnActivateStyle System.Windows.Forms.MessageBox.Show("Funzt") End Sub Es klappt soweit alles, aber er bringt die Meldung logischerweise 2-mal, da der Event ja EventTimingEnum before & after hat... Wieso kann ich in der Methode keine Argumente übermittelt bekommen? Bsp.: Private Sub SurfaceRenderStyleEvent_OnActivateStyle(BeforeOrAfter As Inventor.EventTimingEnum) Handles SurfaceRenderStyleEvent.OnActivateStyle » Fehler: Method cannot handle event because they do not have a compatible signature Benötige ich hier: SurfaceRenderStyleEvent = g_inventorApplication.StyleEvents Ebenfalls Argumente??? Danke und Grüße Mb-Ing
Mit dem Code: Private Sub SurfaceRenderStyleEvent_OnActivateStyle(DocumentObject As Inventor._Document, Style As Object, BeforeOrAfter As Inventor.EventTimingEnum, Context As Inventor.NameValueMap, ByRef HandlingCode As Inventor.HandlingCodeEnum) Handles SurfaceRenderStyleEvent.OnActivateStyle klappt es auch mit dem Nachbarn Jetzt kennt er auch BeforeOrAfter … Danke und Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts [Diese Nachricht wurde von mb-ing am 10. Aug. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|