| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Formulare, Dialoge (1346 mal gelesen)
|
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 08. Jan. 2011 12:30 <-- editieren / zitieren --> Unities abgeben:
Hi, Ich rufe meine Formulare immer mit dieser Funktion auf <Autodesk.AutoCAD.Runtime.CommandMethod("Werkstück")> _ Public Sub Werkstück() If Berechtigung() = False Then Exit Sub Dim frm As Werkstück frm = New Werkstück frm.Show() End Sub bei jedem Aufruf sind die Dialogfelder wieder auf den Standardwert eingestellt. Kann man auch die letzte Eingabe anzeigen lassen. danke DrCNC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 08. Jan. 2011 18:20 <-- editieren / zitieren -->
Hi, Du hast 2 Chancen, Inhalte Deiner Forms nicht zu verlieren: a) Du generierst nur einmal eine neue Instanz des Form-Objekts und greifst bei weiteren Form-Starts nicht auf jeweils neu-initialisierte Instanzen, sondern auf diese am Anfang erstellte (einmalige Instanz) b) Guck Dir in der VS-Hilfe den Bereich My.Settings an, hier können Daten einfach gespeichert werden, und sind dann auch für den nächsten Programmstart wieder verfügbar (also trotz zwischenzeitlichem Beenden Deiner App). Mach mal in Deinem Form einen Klick auf z.B. eine Textbox und schau Dir in den Eigenschaften den Bereich (Application Settings) ==> (Property Binding) an. - alfred - ------------------ www.hollaus.at |
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 08. Jan. 2011 23:03 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 08. Jan. 2011 23:40 <-- editieren / zitieren -->
Hi, bitte (in Deinem Interesse ) keine Namen von Sub/Function/Property mit Sonderzeichen! Und achte auch darauf, dass unterschiedliche Objekte nicht den gleichen Namen bekommen (bei Dir die Formklasse und die Sub, beide 'Werkstück' genannt). Code:
private shared myForm as F_Werkstueck = Nothing 'F_Werkstueck nennt sich die Klasse Deines Forms (hab ich jetzt mal so genannt)<Autodesk.AutoCAD.Runtime.CommandMethod("Werkstück")> _ Public Sub Werkstück() If Berechtigung Then If myForm is Nothing then myForm = new F_Werkstueck End If myForm .Show() Else 'keine Berechtigung End If End Sub
Bitte jedenfalls darauf achten, dass beim Beenden Deiner App dann 'myForm' auch sauber mit .Dispose aus dem Speicher entlassen wird.
- alfred - ------------------ www.hollaus.at |
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 09. Jan. 2011 22:09 <-- editieren / zitieren --> Unities abgeben:
Hi Danke für die rasche Hilfe!! Die Forms funktionieren bereits bestens, haber aber noch ein weiteres Problem! Möchte beim öffnen das Formular mit Daten aus einer Textdatei füllen - funktioniert auch bereits, aber wenn ich das Formular wieder öffne, dann wird es nicht neu inizialisiert. Private Sub UserForm_Initialize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load bei VBA gibt es Ereignise beim Öffnen, beim Anzeigen usw. auch mit dem Befehl dispose (Formular aus den Speicher)kann ich es nicht ein weiteres mal anzeigen lassen. lg DrCNC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Jan. 2011 23:10 <-- editieren / zitieren -->
Hi, >> aber wenn ich das Formular wieder öffne, dann wird es nicht neu inizialisiert Ich meine, etwas falsch verstanden zu haben, oben wolltest Du es doch genau umgekehrt, oder? (Dass eben nicht neu initialisiert wird, sondern die vorigen Einstellungen gleich angezeigt sind) Wenn der EventHandler .Load funktionieren soll, dann musst Du eben Dein Form auf immer und ewig vernichten bevor Du es erneut erstellst und damit initialisierst. Für mein obiges Beispiel wäre das dann:
Code:
Private Shared Sub myFormFinalize() If myForm IsNot Nothing then myForm.Dispose myForm = Nothing End If End Sub
Oder folgende Alternativen: - Du machst wieder Deinen alten Code, dann wird die Form immer vertschüsst und durch Deinen Befehl neu initialisiert (da Du mit New F_Werkstueck die saubere neue Version erzeugst, die dann auch den Event verarbeitet) - Du startest durch eigenen Aufruf Deine Initialisierung bevor Du .Show machst. HTH, - alfred - ------------------ www.hollaus.at |
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 10. Jan. 2011 20:35 <-- editieren / zitieren --> Unities abgeben:
Hi, Nein, du hast nichts falsch verstanden. Ich habe zwei Forms die aus einer Textdatei einlesen soll. Läuft bereits fast alles. Ein kleines Problem habe ich. Wenn ich Forms öffne und ein anderes öffne, flacker das hintere Fenster von ACad kurzzeitig auf. Private Sub Werkzeug_Variable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Werkzeug_Variable.Click Me.Hide() WerkzeugWahl() Me.Show() Me.CNCWerkzeug.Text = Werkzeugvariable End Sub In der Funktion Werkzeugwahl wird ein Dialog mit ShowDialog geöffnet und Daten per Klick ausgewählt. Weiteres hätte noch ene Frage: Kann man in ein Projekt importierte Textdateien auch mit .RedLine einlesen (auch eventuell schreiben - .WriteLine). besten Dank für die große Hilfe!! DrCNC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Jan. 2011 10:19 <-- editieren / zitieren -->
Hi, >> Wenn ich Forms öffne und ein anderes öffne, flacker das hintere Fenster von ACad kurzzeitig auf Yes, hatte ich auch in einer App ==> und hab's leider nie wegbekommen, dass Form-Öffnen/Schliessen zu Flackern der dahinter liegenden Fenster führt. (Ausser dem Flackern ist aber kein störender Effekt vorhanden). >> Kann man in ein Projekt importierte Textdateien auch mit .RedLine einlesen (auch eventuell schreiben - .WriteLine).
Wenn Du mit 'in Projekt importiert' Dein Projekt meinst, und nicht etwa irgendwas AutoCAD-Import..., dann mache ich es meist so:
Code: My.Computer.FileSystem.ReadAllText(.....) - oder - My.Computer.FileSystem.ReadAllBytes(.....)
Ist bei Dateien bis mittlerer Größe (einige MB) durchaus der schnellste Weg, dann hab ich einen String oder ein ByteArray und das kann ich dann im Speicher umschichten, wie's halt grad passt. - alfred - ------------------ www.hollaus.at |
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 11. Jan. 2011 10:54 <-- editieren / zitieren --> Unities abgeben:
Hi, Wurde vieleicht nicht ganz verstanden. Möchte in meiner APP , wo ich Forms, Module usw. erstelt habe eventuell Textdateien hinzufügen und auf sie zugreifen können, dann sind sie nicht externe Dateien und ist in der APP vorhanden. DrCNC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Jan. 2011 11:57 <-- editieren / zitieren -->
Hi, nun verstehe ich leider noch weniger. Wenn Du diese zu Solution in VisualStudio hinzufügen willst, dann reicht es, die Textdatei in das Verzeichnis zu stellen, in welchem Du Deine SourceFiles hast und dann in VS-Projektexplorer (Icon oben) ==> alle Dateien anzeigen, dann diese Textdatei ==> rechte Maustaste ==> zu Projekt hinzufügen. War's das? - alfred - ------------------ www.hollaus.at |
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 11. Jan. 2011 20:48 <-- editieren / zitieren --> Unities abgeben:
Hi, Ja das habe ich auch schon gemacht, aber wie kann ich dann mit dem Code darauf zugreifen, zur Zeit lese ich eine Textdatei ein - verarbeite sie und speichere sie in eine andere Datei ab. DrCNC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 12. Jan. 2011 08:37 <-- editieren / zitieren -->
Hi, >> wie kann ich dann mit dem Code darauf zugreifen, zur Zeit lese ich eine Textdatei ein Na ja, es ist ja eine Textdatei; auch wenn Du diese dem Projekt hinzufügst und ev. auch 'Kopieren in Ausgabeverzeichnis' aktiviert hast, es bleibt eine Textdatei und wird imho nur mit Funktionen zum Lesen von Textdateien behandelbar sein. Vielleicht gibt es einen Hintergrund, was in Deiner Textdatei drin steht und wozu Du diese in Deiner App brauchst. Vielleicht kommen wir da auf was besseres. - alfred - ------------------ www.hollaus.at |
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 12. Jan. 2011 17:17 <-- editieren / zitieren --> Unities abgeben:
Hallo, Diese Textdateien sind Komponenten zu einen CNCProgramm (Vorlagedateien) und sollen nicht verändert werden können. Außerdem währe es optimal, wenn in einer App alles komplett vorhanden ist. Diese Textdateien werden von der App eingelesen und mit Daten von ACad gefüllt. Dann werden sie auf jedenfall wieder in verschiedene Texdateien abgespeichert und vom externen Postprozessor verarbeitet. Als externe Dateien kann ich sie schon einlesen und funktioniert alles bereits sehr gut, natürlich mit deiner (Eurer) großen Unterstützung. DrCNC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 15. Jan. 2011 01:29 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 15. Jan. 2011 07:57 <-- editieren / zitieren -->
Hi, wieso nicht wie oben schon angeführt? Was gefällt daran nicht?
Code: My.Computer.FileSystem.ReadAllText(.....) - oder - My.Computer.FileSystem.ReadAllBytes(.....)
- alfred - ------------------ www.hollaus.at |