Laden...

Für jedes Objekt (hier: Com-Port) einen eigenen Satz von Controls erzeugen

Erstellt von Sm|_| vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.387 Views
S
Sm|_| Themenstarter:in
11 Beiträge seit 2012
vor 12 Jahren
Für jedes Objekt (hier: Com-Port) einen eigenen Satz von Controls erzeugen

Hallo Liebe Gemeinde,

Ich schreibe derzeit an meiner Thesis arbeit und werde ab und an vieleicht ein paar Fragen an euch haben.

Die erste wäre wie Folgt:
Im Anhang habe ich eine Form mit mehreren Controls. Ich möchte gerne die Rechte Seite (Also die COM - Sparte) je nach Konfiguration vervielfältigen.
Das heist, je nach Anzahl der benötigten Com Ports möchte ich das sich die Fenster erweitern.

Meine Idee ist bis jetzt das ich das alles über Tabs steuern werde, d.h. ich möchte wenn ich in der Config eingestellt habe das ich 3 Com Ports ansteuere, dass dann dieses Fenster mit einem TabControl erweitert mit dementsprechend vielen Tabs.
In jedem Tab sollen dann die selben Einstellungen Pro Port eingestellt werden.
Auch wenn mans nicht sehen kann hab ich die linke und rechte Seite mit nem SplitContainer getrennt.

Ich hoffe die info reicht bis jetzt.
Gibt es elegantere möglichkeiten?

A
764 Beiträge seit 2007
vor 12 Jahren

hallo Sm|_|,

du könntest dir ein UserControl (oder TabPage) machen, dass die entsprechenden Controls für die Com-Einstellungen schon fertig beinhaltet. Die bleiben ja immer gleich. Für jeden neuen Port, machst du dann einfach eine neue TabPage in dein TabControl.

Gruß, Alf

S
Sm|_| Themenstarter:in
11 Beiträge seit 2012
vor 12 Jahren

Ah Ok UserControl ist glaube ich mein Stichwort.

Ich mach mich grad mal schlau wie ich das anstell.
Danke schon mal ich geb nacher Bescheid wenn es elegant geworden ist 😉

edit:
Ich nutze VS 2005...

49.485 Beiträge seit 2005
vor 12 Jahren
S
Sm|_| Themenstarter:in
11 Beiträge seit 2012
vor 12 Jahren

Ist es richtig das ich den kompletten fertigen Code von meinem bisherigen Designer übernehmen kann und in mein User Control schreiben darf?

Meine vorgehensweise war bisher das ich den Code des alten Designer und der alten Klasse übernommen habe.
Jedoch zeigt sich nur eine Leere Form beim Verwenden des controls an.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Sm|_|,

grundsätzlich kannst du Code aus dem Designer kopieren und als Vorlage verwenden. Es gibt aber keine Garantie, dass dies in jedem Fall vollkommen ohne Anpassungen geht. Anderseits sollte sich etwaige Fehler spätestens im Debugger finden lassen, sofern nicht vorher schon der Compiler meckert.

herbivore

S
Sm|_| Themenstarter:in
11 Beiträge seit 2012
vor 12 Jahren

Fehler zeigt er keine an.
Bis jetzt passt er zwar die größe an jedoch werden die einzigen controls darauf nicht angezeigt.
Muss es beim [Entwurf] meines Usercontrols auch schon richtig angezeigt werden?

5.742 Beiträge seit 2007
vor 12 Jahren

grundsätzlich kannst du Code aus dem Designer kopieren

Lieber nicht.
Markiere besser die Controls, schneide sie aus (STRG+X) und füge sie auf dem Usercontrol wieder ein (STRG + V).

S
Sm|_| Themenstarter:in
11 Beiträge seit 2012
vor 12 Jahren

Den Frame zeigt er zwar an, doch der Inhalt fehlt einfach, also meine ganzen Buttons und Labels.
Das ist bisschen komisch

edit:
Ok blöder Fehler, habe die Control.Add vorhin rausgelöscht da sie in der alten Form den Splitcontainer geAddet haben aber ich den diesmal ja nicht brauchte.

D
201 Beiträge seit 2007
vor 12 Jahren

Hallo Sm|_|,

Ich habe bei einem meiner Projekte ein ganz ähnliches UI für die Kommunikation über serielle Schnittstellen. Ich habe ebenfalls ein UserControl erstellt, was je nach Auswahl in einer ComboBox die Daten des ausgewählten Ports anzeigt, das ist also meiner Meinung nach der richtige Weg um so etwas komfortabel zu lösen.

Um das ganze in ein Usercontrol auszulagern würde ich empfehlen die Controls im Designer aus der Form auszuschneiden und im Designer des usercontrols einzufügen. Leider muss man danach aber die Eventhandler neu erstellen, oder eben die Methoden ebenfalls rüberkopieren und neu zuweisen.

edit:
Ich nutze VS 2005...

hat es einen bestimmten Grund,dass du VS2005 nutzt?
Grade für eine akademische Abschlussarbeit wäre es doch bestimmt besser aktuelle Technik einzusetzen, oder? (nur so am Rande)

Viel Erfolg

S
Sm|_| Themenstarter:in
11 Beiträge seit 2012
vor 12 Jahren

Der Grund für VS2005 ist einfach das die Firma diese Software nutzt und bestimmte Lizensen dafür hat.

Sicher würde ich auch gerne die VS2010 Ultimate etc. nutzen die meine FH auch anbieten würde, aber so wird das ja auch klappen.

Das Endprodukt soll dann ein Mitarbeiter hier so simple und komfortabel wie möglich nutzen können deshalb will ich auf etwaigen Schnickschnack verzichten.

Das mit den UserControls find ich auch wirklich eine sehr gute Sache da ich das ganze dann einfach als Baukasten nutzen kann und nach meinem belieben erweitern lässt.

MFG Sm|_|

S
Sm|_| Themenstarter:in
11 Beiträge seit 2012
vor 12 Jahren

Sooo,
Also ich kann nun mein eigenes Control benutzen und damit jede beliebige Form ausstatten.
Meine Frage ist nun ob ich die Funktionen der einzelnen comboboxen etc. in der eigenen ControlKlasse erzeugen muss oder in der jeweiligen Form?
Ich weis nämlich nicht wie das mit den Zugriffen genau ist.
Ich möchte ja die Eingaben zwar in den eigenen Control schreiben aber da sie ja in einem anderen Projekt liegt kann ich die dadurch entstandenen Informationen ja nicht mit meiner eigentlichen Klasse teilen.

EDIT:
Lösung durch get() und set()

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Sm|_|,

Lösung durch get() und set()

vom zugrunde liegenden Prinzip (Kapselung) her ja, aber wenn du damit Methoden meinst, dann wäre das suboptimal. Verwende besser Properties.

herbivore

S
Sm|_| Themenstarter:in
11 Beiträge seit 2012
vor 12 Jahren

Hallo Herbivore,

Ich habe mir überlegt das es Allgemein sowieso besser ist wenn die komplette Übertragungssache nur von meiner ComControl (UserControl) geregelt wird.
D.h. alle Eingaben werden von meinem Control bearbeitet und in die jeweiligen Eigenschaften der SerialPort Klasse übertragen.

Ich muss also nur 1 mal diese Control schreiben und werde dann Objekte befüllen die verschiedene Ports einstellen und öffnen.
Ist meiner Meinung nach die eleganteste Lösung.

S
Sm|_| Themenstarter:in
11 Beiträge seit 2012
vor 12 Jahren

Ich scheitere gerade daran die Werte die ich den einzelnen Controls übergebe, geregelt in eine .txt Datei auszuschreiben.
Mein Problem dabei ist das ich die Methoden zum schreiben und auslesen in meinem UserControl habe (welcher in einem externen Projekt liegt) aber er nun nicht geordnet in die txt Datei geschrieben werden kann da jedes Objekt vom UserControl Blind zum anderen ist.

Mein Ziel ist es das ich die .txt Datei als Config Datei nutzen kann und deshalb möchte ich eine geordnete Struktur darin haben welche auch richtig wieder bei Program start eingelesen wird.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Sm|_|,

die Controls müssen sich ja auch nicht kennen, nur um in eine gemeinsame Datei zu schreiben. Mal abgesehen davon, dass Persistenz eigentlich ein separater Concern ist, würde es pragmatisch gesehen reichen, dem Control einen geöffneten Stream zu übergeben, in es seine Daten speichert oder aus dem es seine Daten liest. Das können die Controls ja vollkommen unabhängig voneinander (sie dürfen nur den anderen Controls nichts weglesen, was denen gehört, also kein ReadToEnd o.ä. benutzen). Den Strom öffnen und schließen kann das Main-Form.

Ich kann zwar irgendwie verstehen, dass du das in diesem Thread gefragt hast. Allerdings ist das keine GUI-Frage mehr. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.2.

herbivore