| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Userform in Dll (2590 mal gelesen)
|
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 01. Jul. 2009 14:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich versuche momentan von VBA auf Vb.Net um zu programmieren (Bin noch total am Anfang). Habe gesehn, dass es schon einen Beitrag namens "Userform in DLL" gibt, konnte aber ausgerechnet den nicht aufmachen!(Not Found) Jetzt habe ich folgendes Problem, wie kann ich über eine dll eine Userform in AutoCAD laden? Ich habe mein VB.Net ClassLibary Projekt angelegt und würde jetzt von meiner UserformTest.vb auf die Form1.vb (Im gleichen Projekt) so: --------------------------------------------------------------------------------------------------- Imports System Imports System.Type Imports Autodesk.AutoCAD.Runtime Public Class UserformTest <CommandMethod("USERFORM")> Public Function Userform() Form1.Show() End Function End Class --------------------------------------------------------------------------------------------------- zugreifen. Leider Funktioniert das nicht. Die Form1 habe ich durch Rechtsklick auf mein Projekt -> Hinzufügen -> Windows Form -> Windows Form erstellt. Fehlermeldung: Der Verweis auf einen nicht freigegebenen Member erfordert einen Objektverweis. (An der markierten Stelle) Was muss ich tun, um diese dll zum laufen zu bekommen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 01. Jul. 2009 15:07 <-- editieren / zitieren -->
Hi, wo wird denn Dein Objekt 'Form1' instanziert? Das sehe ich hier im Code nicht und damit ist mit Unterstützung leider recht wenig möglich. ------------------ www.hollaus.at |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 01. Jul. 2009 15:18 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 01. Jul. 2009 15:25 <-- editieren / zitieren -->
Hi, zumindest ist es nicht mit VBA vergleichbar! Dim tFormObj as Form1 = new Form1 tFormObj.Show aufpassen nur, dass das Form nicht gleich wieder verschwindet, denn entweder Du startest es modal (im Vordergrund, Focuserhalt, Code läuft erst weiter, wenn Form geschlossen wird) oder Du musst 'tFormObj' irgendwo anders deklarieren (ev. mit Shared), damit es parallel mit AutoCAD 'leben kann'. - alfred -
------------------ www.hollaus.at |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 01. Jul. 2009 16:05 <-- editieren / zitieren --> Unities abgeben:
Hallo, alles klar hab ich gemacht. Mit netload die dll geladen. Dann hab ich "userform" in AutoCAD eingegeben und bekam folgende Fehlermeldung: Systemfehler : Unhandled Access Violation Reading 0x0000 Exception at 1e3bd2b9h Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 01. Jul. 2009 17:20 <-- editieren / zitieren -->
Hi, es scheint ja (nach dem VS-Projektexplorer) ein kleines Projekt zu sein, mach ein ZIP aus der ganzen Solution und lad's hier herauf. Die Fehlermeldung kann so viele Ursachen haben und in den Projekteinstellungen können so viele Schalter umgelegt sein, schwer zu erraten. - alfred - ------------------ www.hollaus.at |
Ex-Mitglied
|
erstellt am: 01. Jul. 2009 21:37 <-- editieren / zitieren -->
Ein kleiner Hinweis sei mir noch erlaubt: schreibst Du eine AutoCAD-Applikation, dann würde ich weitestgehend auf das UserInterface von AutoCAD aufsetzen. Ein eigenes Form-Objekt ist (aus meiner Sicht) für kurze Dialoge zwischendurch, wo das Form aufgeht und sich danach wieder schliesst, ok; wenn Du aber ein ganzes Benutzerinterface für eine Applikation machst (und dieses während der Laufzeit von AutoCAD immer geöffnet sein soll), dann gehe ich derzeit den Weg, diese Bedienelemente in ein UserControl einzubetten und das wiederum in eine Palette in AutoCAD einzubetten. Mit der Palette hast Du die Vorteile: - das kann angedockt werden - das wird automatisch minimiert, wenn AutoCAD minimiert wird - es bleibt (im Verhältnis zum AutoCAD-Applikationsfenster) im Vordergrund Und ein gutes Beispiel findest Du im ObjectArx-Kit unter '...\samples\dotNet\DockingPalette' (ist interessanterweise im 2009-Kit drin, in 2010 nicht mehr, funktioniert aber ident). Für 2010 (und folgende Versionen) wird es wohl interessanter, die Funktionen in Ribbons per WPF zu generieren, da hier mächtig viel Potential zur Verfügung steht (2009 noch nicht, da ist die WPF-Umsetzung von AutoCAD noch zu fehlerhaft, siehe Debug-Ausgaben im VS, wenn Du AutoCAD startest). - alfred - ------------------ www.hollaus.at |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 02. Jul. 2009 09:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, das mit dem Userinterface von AutoCAD wird nichts, das Programm, welches ich schreiben soll wird ziemlich umfangreich. Daher wird eine extra Benutzeroberfläche benötigt! Ich habe mal eine .zip von meinem Test Programm angehängt. Das mit dem WPF schau ich mir mal an danke für den Tipp! Grüße Silvan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Jul. 2009 09:24 <-- editieren / zitieren -->
Hi Silvan, das ware der funktionierende Code: Code: Public Class UserformTest <CommandMethod("Userform")> Public Sub Userform() Dim tFormObj As Form1 = New Form1 tFormObj.ShowDialog() End Sub End Class
Und in den Projekteinstellungen habe ich die Verweise auf meine Verzeichnisse angepasst (da kann ich nur sagen, Du hast die richtigen Namen 'acdbmgd' und 'acmgd' verwendet, bitte nur sicherstellen, dass diese aus dem AutoCAD-Verzeichnis kommen, für die Du das dll machst) In den Projekteinstellungen habe ich unter 'Debuggen': Hakerl bei 'externes Programm ausführen' und darin den kompletten Pfadnamen zu meiner 'acad.exe', in meinem Fall C:\Program Files\Autodesk\AutoCADCivil3D2010\acad.exe Und unter 'Startverzeichnis' den Pfad zum ...UserDataCache, also in meinem Fall C:\Program Files\Autodesk\AutoCADCivil3D2010\UserDataCache In den Projekteigenschaften-Debuggen solltest Du während des schreibens oben (Konfiguration) auf 'Debug' gehen, sonst gibt's keine Debug-Info. Erst wenn das Projekt released ist und Du es verteilst, machst Du die Umstellung auf 'Release'. Wobei ich das auch nie mache, sondern im Ausgabeverzeichnis einfach die Dateien von Typ '*.pdb' lösche, kommt sich auf's gleiche. Ich debugge nie in der Form, dass ich mich an einen Prozess anhänge, sondern immer so, dass ich das AutoCAD vom VS aus starten lasse, ist die stabilere Version (beides probiert, kein Vergleich). In den Projekteigenschaften-Kompilieren tust Du gut daran, 'Option Strict' auf 'On' zu schalten, zeigt Dir schon während des Code-Schreibens mehr mögliche Fehlerquellen an (nicht deklarierte Variable, Typkonflikte, ..). HTH, - alfred - ------------------ www.hollaus.at |
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 02. Jul. 2009 14:14 <-- editieren / zitieren --> Unities abgeben:
|
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 08. Jul. 2009 14:38 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal, ich möchte mit meiner Oberfläche parallel mit AutoCAD arbeiten können. Jetzt weiß ich aber nicht, wo ich meine Oberfläche definieren soll, um dies zu erreichen. Momentan sieht es folgendermaßen aus: ------------------------------------------------------------------------------------------------------------ Public Module Functions Public Userform As Testoberflaeche = New Testoberflaeche End Module Public Class Test <CommandMethod("Userform")> Sub load_Userform() Userform.ShowDialog() End Sub End Class ------------------------------------------------------------------------------------------------------------ In Module Functions wird noch mit der Userform gearbeitet bzw. werden Informationen der Userform abgefragt und übertragen. Grüße Silvan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 08. Jul. 2009 15:50 <-- editieren / zitieren -->
Hi, nicht mit '.ShowDialog', sonder mit '.Show' starten. - alfred - PS: das andere seh' ich mir gleich an, war nur unterwegs. ------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 09. Sep. 2009 10:54 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
Zitat: Original erstellt von a.n.: [...] schreibst Du eine AutoCAD-Applikation, dann würde ich weitestgehend auf das UserInterface von AutoCAD aufsetzen [...]
Bei meinem anstehenden Programm soll es auch ein größeres Userinterface geben, in welchem: - SpinButtons benötigt werden - über DropDown Listen Einträge ausgewählt werden - ein paar RadioButtons und CheckBoxen - Labels und Ausgabetextfelder - Grafiken (Bilder) vorkommen. Dieses Formular ist z.Zt. noch in Excel realisiert und hier wird eine initiale Konfiguration für das Programm vorgenommen. Später soll auf Excel verzichtet, da das Programm komplett in AutoCAD realisiert werden soll und die initiale Konfiguration direkt in AutoCAD möglich sein. Ist hier nun das AutoCAD UI oder das .net Winforms UI zu empfehlen. Ob es gleich WPF sein muss, weiß ich nicht -> evtl. noch komplizierter für mich?!? Was ist denn eine einsteigerfreundliche Variante? Danach soll wenigstens ein kleines Fenster geöffnet bleiben, in welchem Anweisungen ausgegeben werden und in welchem es einen "Weiter" Button gibt. Dieses soll durch die schrittweise automatisierte Erstellung der AutoCAD Zeichnung führen. Welche UI Form wäre hier empfehlenswert? Ich hoffe es ist einigermaßen verständlich...sonst bitte Fragen. ---------------------------------------------------------------- Noch eine andere Sache. Die Daten, mit welchen die DropDown Listen gefüllt werden, kommen aus einer XML Datei. Es sollte kein Problem sein, diese mittels .net Programmcode zu öffnen und die Listen zu füllen? Wenn die xml Datei z.B. im gleichen Verzeichnis wie die AutoCAD Zeichnung und "Erweiterungs dll" / mein Programm liegt, sollte das auch im Hintergrund automatisch passieren können, richtig? Alternative 1: Soweit ich das bisher mitbekommen habe, gibt es auch Möglichkeiten in sogenannten "Dictionaries" Daten zu speichern. Früher gab es wohl mal die "XData" Container. Wenn ich das richtig verstanden habe, sieht es mittlerweile so aus: Quelle: AutoCAD Videotutorial -> "22. Custom Data - XRecord" und "23. Custom Data - Dictionaries"
Als Datencontainer dienen XRecords. Diese können Dictionaries zugeordnet werden. Entweder dem "Named Objects Dictionary (NOD)" oder dem "Extension Dictionary". Das NOD wird zusammen mit der Zeichnung abgespeichert? Ist es somit also möglich dieses als Speicher für Daten zu verwenden, die einmalig aus der xml Datei eingelesen wurden? Alternative 2: Könnte man dieses wenigstens dazu verwenden, die "letzte Auswahl" in den UserInterface Listen, Buttons etc. zu speichern um beim erneuten Öffnen der Zeichnung die Listeneinträge, Buttons etc. wieder anzuwählen. Die Listen würden davor aus der XML Datei befüllt.
Oder gibt es da bessere Alternativen? Es sind wieder mal ziemlich viele Fragen - Danke für die Hilfe!
Sebastian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Sep. 2009 11:14 <-- editieren / zitieren -->
Hi Sebastian, >> Ist hier nun das AutoCAD UI oder das .net Winforms UI zu empfehlen. >> Ob es gleich WPF sein muss, weiß ich nicht -> evtl. noch komplizierter für mich?!? Ich baue immer ein UserControl (VS-Standard), damit hab ich mal den Vorteil, dass ich dieses in jede Art von UserInterface einbauen kann, egal ob ich ein Windows-Form haben will oder, wie im Falle einer AutoCAD-Applikation dann in eine Palette packe (und das wäre auch schon der 'einfachste' Weg). WPF ist natürlich zu überlegen, denn auch wenn es kompilziert ist, es scheint alles (MS-Office, AutoCAD seit 2009) darauf abzufahren (schön find ich's auch), aber ist imho etwas heftig für den Einstieg. >> XML .... Listbox .... sollte das auch im Hintergrund automatisch passieren können, richtig?
Neben dem Punkt, dass ich statt einer Listbox eher den DataGrid bevorzuge, JA. Aber was 'automatisch passiert', das gibst Du Dir doch selbst vor, sonst würdest Du nicht programmieren, oder? >> XData ... Dictionaries
XData gibt's noch immer, haben halt den Nachteil, dass die Datenmenge mit 16kB begrenzt ist. In Dictionaries kannst Du (fast) alles speichern. Beides ist in der DWG mitgesichert. >> Ist es somit also möglich dieses als Speicher für Daten zu verwenden, >> die einmalig aus der xml Datei eingelesen wurden?
Ja, schon. Klingt aber sehr danach, als hättest Du einen Datenpool, aus dem Du die Zeichnung füllst (und damit groß machst). Wenn das z.B. Stammdaten aus dem Unternehmen/-bauteilen sind, dann überleg bitte vorher, ob Du nicht eher eine Datenbankanbindung machst und an der AutoCAD-Geometrie nur ID's von den richtigen Datensätzen in der Datenbank speicherst. Sonst fällt Dir irgendwann eine Aktualisierung der Stammdaten auf den Kopf, wenn Du dann alle Zeichnungen aktualisieren willst. >> Alternative 2: Könnte man dieses wenigstens dazu verwenden, die "letzte Auswahl" >> in den UserInterface Listen, Buttons etc. zu speichern um beim erneuten Öffnen >> der Zeichnung die Listeneinträge, Buttons etc. wieder anzuwählen. >> Die Listen würden davor aus der XML Datei befüllt.
Sorry, neben der Situation, dass ich das nicht mehr verstehe (keine Hintergrundinfo, wieso sich abhängig von der geladenen Zeichnung Buttons im UserInterface verändern sollen) beginnt jetzt schon Konzeption Deiner Applikation. Bitte nimm auch Rücksicht darauf, dass das Forum hier für 'punktuelle Hilfestellung' gebaut ist, nicht dafür, komplette Beratungen durchzuführen. - alfred - ------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 09. Sep. 2009 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
Hallo Alfred, tut mir Leid mit den zu allgemeinen Informationen! Wollte bzgl. der Datenspeicherung nur weitere Infos über die Möglichkeiten "abgreifen", da ich mich da einfach noch zu wenig auskenne. Ein sehr vereinfachtes Beispiel, was ich vorhabe (einer der möglichen Wege): 1. Meine Applikation in AutoCAD starten 2. XML Datei einlesen 3. Daten filtern und Listen im UI füllen 4. User wählt bestimmte Einträge aus (z.B. Bauteil "Rechteck", welches fest hinterlegt die Höhe=5 und Breite=2 hat) 5. Je nach Größe des Bauteils das Bauteil automatisch zeichnen lassen bei Betätigen eines Buttons 6. In der Zeichnung ist nun ein Bauteil dieses Typs -> diesen in einem Dictionary speichern (Named Objects Dictionary?) 7. Zeichnung speichern und schließen. 8. Zeichnung erneut öffnen 9. XML Datei wird wieder automatisch (das meinte ich vorhin) gelesen, diese liegt z.B. im selben Ordner der Zeichnung 10. Listen werden wieder gefüllt 11. Bauteilname des Bauteils in der Zeichnung im Dictionary nachschlagen 12. Listeneintrag wieder passend setzen, um im UserInterface Informationen über das Bauteil auf der Zeichnung "wiederzuspiegeln" Eine Sache noch zum UserInterface. Dein Ansatz klingt hier sehr interessant. Ich kenne UserControls bisher nicht, habe mir aber mal >>diesen<< (Seite 2) und >>diesen<< Artikel durchgelesen. Sind das die UserControls, die du meinst? D.h. für mich, ich baue mir in VS mein UserControl, also mein ganzes Interface mit Buttons, CheckBoxen, Listen etc. und kann dieses UserControl dann entweder in einem Windows Programm (Form1.vb z.B.) oder in AutoCAD (Palette?) einbetten. Welches Template verwende ich da zum Bauen des UserControl? "Windows Control Library"? Ein Ändern des eingebundenen UserInterface ist auf diesem Wege trotzdem einfach möglich? Vielen Dank für die aufgewendete Zeit!! Ich hoffe, die Fragen werden bald weniger ... Grüße, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Sep. 2009 13:47 <-- editieren / zitieren -->
Hi, >> In der Zeichnung ist nun ein Bauteil dieses Typs -> diesen in einem Dictionary speichern Wenn Du zu Objekten etwas dazuspeicherst, dann bitte in objektbezogenen Daten. Wenn Bauteile nicht schon als Block definiert sind (und damit die notwendigen Basisinformationen nicht schon in der Blockdefinition enthalten sind), dann nicht in einem NOD speichern, sonst hast Du das Problem, dass der Anwender Dir das Teil unterm Hintern weglöscht und der NOD-Eintrag dann seine Geometrie nicht mehr findet. Schau Dir bitte zuerst Blöcke an und was in Attributen (sichtbar/nicht-sichtbar, konstant oder variabel) alles gespeichert werden kann, sonst endet das in Zeichnungen, die ohne Deiner Applikation nicht mehr 'normal' zu bearbeiten wären. >> Bauteilname des Bauteils in der Zeichnung im Dictionary nachschlagen
Wozu unsichtbar, da kannst Du ohne weiteres den Blocknamen dafür verwenden oder ein Attribut, das im Block enthalten ist. >> Sind das die UserControls, die du meinst?
yes. >> Welches Template verwende ich da zum Bauen des UserControl?
?? keine Templates (zumindest wüsste ich nicht, was hier als Vorlage existieren könnte). Im Projektmappen-Explorer von VS2008 ==> rechte Maustaste ==> hinzufügen ==> Benutzersteuerelement. >> Ein Ändern des eingebundenen UserInterface ist auf diesem Wege trotzdem einfach möglich?
...genauso einfach oder schwierig wie das Modifizieren des Layouts/Designs eines Form-Objekts. - alfred -
------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 09. Sep. 2009 15:00 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
Zitat: Original erstellt von a.n.: [...] Wozu unsichtbar, da kannst Du ohne weiteres den Blocknamen dafür verwenden oder ein Attribut, das im Block enthalten ist.
Da hast du natürlich recht! ;) Soweit ich mich erinnern kann meinten Diplomanden, welche zuvor an diesem Programm in AutoCAD VBA gearbeitet hatten, dass ein weiteres Blockattribut deutlich mehr Performance kostet. Wenn von diesem Block z.B. 50000 Referenzen erstellt werden... Jetzt denke ich aber, dass man das Attribut "Name" schon zur Blockdefinition speichern könnte, dann sollte es beim Erstellen der Referenzen zu keinen Performanceunterschieden kommen, wenn ein Attribut mehr oder weniger angehängt ist?! Zitat: [...] keine Templates (zumindest wüsste ich nicht, was hier als Vorlage existieren könnte). Im Projektmappen-Explorer von VS2008 ==> rechte Maustaste ==> hinzufügen ==> Benutzersteuerelement. [...]
Also erstellst du im Normalfall mittels des ObjectARX Templates "AutoCAD Managed VB Project Application" das Projekt und fügst dort dann das Benutzersteuerelement hinzu. Außerdem bettest du das erstellte Userinterface dann in ein AutoCAD Palette "Formular"... Das war's für heute hoffentlich, danke mal wieder! Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Sep. 2009 15:11 <-- editieren / zitieren -->
Hi, >> dass ein weiteres Blockattribut deutlich mehr Performance kostet ...ohne es probiert zu haben: das Schreiben einer Dictionary kostet mehr Zeit, die Anzeige des Attributs bei vielen BlockReferenzen ist sicher langsamer, aber dazu gibt es ja unsichtbare Attribute. >> Also erstellst du im Normalfall mittels des ObjectARX Templates >> "AutoCAD Managed VB Project Application" das Projekt
...ok, jetzt weiss ich, von welcher Art von Templates Du sprichst. Da kann ich nicht mitreden, ich habe mir zwar die ARX-Vorlagen einmal angesehen (vor Jahren), da steht so viel Müll drin, dass ich darauf gerne verzichte. Damit hab ich auch nie wieder einen Blick in die Vorlagen gemacht und vielleicht ist mir etwas entgangen (für dotNET-Vorlagen), aber ich vermisse diese nicht-. Ich starte mit einem leeren C# oder VBdotNET - DLL Projekt und stell die Verweise zu den Lib's ein, die ich brauche (die AutoCAD braucht). Ich kenne die aktuellen Vorlagen nicht, daher kann ich diesbzgl. leider nicht 'mit-schreiben'. >> Außerdem bettest du das erstellte Userinterface dann in ein AutoCAD Palette
...so is es (aber lass den Begriff Formular hinter 'AutoCAD Palette' gleich weg, sonst wird's schwer widersprüchlich ) - alfred -
------------------ www.hollaus.at |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 09. Sep. 2009 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
|
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 16. Sep. 2009 10:15 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
Guten Morgen! Ich habe ein Problem beim Erstellen des PaletteSet. Und zwar habe ich den Beispielcode des Autodesk .net Videos benutzt: Code: ' declare a paletteset object, this will only be created once Public myPaletteSet As Autodesk.AutoCAD.Windows.PaletteSet ' we need a palette which will be housed by the paletteSet Public myPalette As UserControl1 ' palette command <CommandMethod("palette")> _ Public Sub palette() ' check to see if it is valid If (myPaletteSet = Nothing) Then ' create a new palette set, with a unique guid myPaletteSet = New Autodesk.AutoCAD.Windows.PaletteSet("My Palette", New Guid("D61D0875-A507-4b73-8B5F-9266BEACD596")) ' now create a palette inside, this has our tree control myPalette = New UserControl1 ' now add the palette to the paletteset myPaletteSet.Add("Palette1", myPalette) End If ' now display the paletteset myPaletteSet.Visible = True End Sub
Als Imports habe ich definiert: Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry Imports System.Windows Also Verweise ist definiert: AcDbMgd AcMgd System System.Core System.Data System.DataSetExtensions System.Windows.Forms Als Fehlermeldung kommt: Es ist ein Verweis auf die Assembly "PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" erforderlich, die die implementierte Schnittstelle "System.Windows.Interop.IWin32Window" enthält. Fügen Sie dem Projekt einen Verweis hinzu.[...]
Und nun kann ich soetwas wie "PresentationCore" beim Hinzufügen von Verweisen nicht finden... Weshalb brauche ich diesen Verweis überhaupt und im Beispiel wird er nicht benutzt? -> Ich benutzte AutoCAD 2010 & VS2008...deshalb? ------------------------------- An sich ist das Vorgehen im Quellcode mit dem Einfügen eines UserControl in eine Palette das, was Alfred in den vorherigen Antworten beschrieben hatte, richtig? Auf dem UserControl wird folglich das ganze UserInterface mit Listen, Checkboxen etc. erstellt... ------------------------------- Noch eine allgemeine Frage: Was ist der genaue Unterschied zwischen dem "Imports" Befehl im Quellcode, den "Verweisen" in den Projekteigenschaften und "Importierte Namespaces" (auch im Reiter Verweise) in den Projekteigenschaften? Grüße & Danke, Sebastian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sebastian. Mitglied
Beiträge: 90 Registriert: 03.09.2009 Windows XP Prof. SP3 AutoCAD 2010 Visual Studio 2008 / 2010 Prof.
|
erstellt am: 16. Sep. 2009 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
Zitat: Als Fehlermeldung kommt:Es ist ein Verweis auf die Assembly "PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" erforderlich, die die implementierte Schnittstelle "System.Windows.Interop.IWin32Window" enthält. Fügen Sie dem Projekt einen Verweis hinzu.[...] Und nun kann ich soetwas wie "PresentationCore" beim Hinzufügen von Verweisen nicht finden...
Diese Sache hat sich erledigt...ich hatte den Verweis übersehen, er war doch auch bei den .NET Verweisen aufgelistet. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 16. Sep. 2009 18:05 <-- editieren / zitieren -->
Hi Sebastian, >> Weshalb brauche ich diesen Verweis überhaupt und im Beispiel wird >> er nicht benutzt? -> Ich benutzte AutoCAD 2010 & VS2008...deshalb? Den Verweis brauchst Du, wenn Form (-ähnliche) Objekte (Windows-Controls) in Deiner App enthalten sind und Du basierend auf Framework 3.5 arbeitest. Erstellst Du Deinen Code z.B. für AutoCAD 2008, dann braucht Du als Basis-FrameWork 2.0, dann ist auch die Core-Assembly nicht gefragt. - alfred - ------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|