Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Userform in Dll

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von Silvan01 an!   Senden Sie eine Private Message an Silvan01  Schreiben Sie einen Gästebucheintrag für Silvan01

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 01. Jul. 2009 14:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


UserFormTest.JPG

 
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von Silvan01 an!   Senden Sie eine Private Message an Silvan01  Schreiben Sie einen Gästebucheintrag für Silvan01

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 01. Jul. 2009 15:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

das war bis jetzt mein kompletter Code 

Es ist also nötig noch eine Variable anzulegen und ihr den Verweis auf meine bereits erstellte Userform zu geben richtig?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 01. Jul. 2009 15:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von Silvan01 an!   Senden Sie eine Private Message an Silvan01  Schreiben Sie einen Gästebucheintrag für Silvan01

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 01. Jul. 2009 16:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von Silvan01 an!   Senden Sie eine Private Message an Silvan01  Schreiben Sie einen Gästebucheintrag für Silvan01

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 02. Jul. 2009 09:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Userform.zip

 
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat


Userform.zip

 
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



Sehen Sie sich das Profil von Silvan01 an!   Senden Sie eine Private Message an Silvan01  Schreiben Sie einen Gästebucheintrag für Silvan01

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 02. Jul. 2009 14:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hey Alfred,

das warn ja ne Menge hilfreicher Tipps!
Vielen Dank für deine Hilfe  .
Das Testprogramm läuft.

Grüße

Silvan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Silvan01
Mitglied



Sehen Sie sich das Profil von Silvan01 an!   Senden Sie eine Private Message an Silvan01  Schreiben Sie einen Gästebucheintrag für Silvan01

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 08. Jul. 2009 14:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Silvan01 10 Unities + Antwort hilfreich

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Silvan01 10 Unities + Antwort hilfreich

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Silvan01 10 Unities + Antwort hilfreich

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Silvan01 10 Unities + Antwort hilfreich

Vielen Dank!

Hat mir alles sehr weitergeholfen! 

Sebastian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

sebastian.
Mitglied



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Silvan01 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von sebastian. an!   Senden Sie eine Private Message an sebastian.  Schreiben Sie einen Gästebucheintrag für sebastian.

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Silvan01 10 Unities + Antwort hilfreich

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz