viele wechselnde Steuer- und Auswahlelemente: wie programmieren ?

flaavia

Mitglied
Hallo

Welche Programmiertaktik ist denn die beste, um viele wechselnde Programm-Oberflächen (Eingabe- oder Auswahlmasken) darzustellen - und zwar wechselnd in Abhängigkeit von den gerade durchgeführten Aufgaben.

Sollte man jede Maske in eine eigene Form packen, oder sollte man nur die jeweils gerade benötigten Steuer- und Auswahlelemente auf visible schalten und die anderen unsichtbar machen, oder jede logische Gruppe auf ein Panel legen und dann jeweils nur das benötigte Panel sichtbar schalten. Dieser letzte Ansatz erscheint mir für die Durchführung gut, zur Entwicklungszeit ist dies aber wohl sehr unübersichtlich, da alle potentiellen Panels dann sichtbar übereinender liegen.

Hat jemand damit schon Erfahrung und einen guten Vorschlag - der nicht nur zur Entwicklungszeit gut machbar ist, sondern auch zur Laufzeit ansprechend aussieht (jeweils neue Fenster ist naürlich möglich, aber kann auch ziemlich unelegant wirken -oder )

Vielen Dank für alle Tips im voraus
 
Also soweit ich dich verstanden habe, willst du folgendes machen:
Du hast z.B. links Auswahlbuttons. Und nun möchtest du wenn man auf ihrgend was klickt das Entsprechende Formular angezeigt wird? Wenn ja, dann könntest du ein einziges Panel erstellen, und jedes einzelne Formular über ein UserControl erstellen und zur Laufzeit auf die Form machen, so mache ich das bei meinem aktuellen Projekt. Wenn das so richtig war kann ich die gerne einen kleinen Codeausschnitt aus meinem Projekt posten.
 
Hallo Counterfeit

Danke für die Antwort.

Im wesentlichen möchte ich in meinem Programm (das auf einem TabletPC laufen soll) möglichst schnell und effizient verschiedene Daten eingeben.

Hierbei gibt es ganz unterschiedliche Situationen, die alle eine andere Eingabemaske erfordern. Ich würde z.B. gerne als erstes einen Butten ( als Auswahlvon vielen verschidenen) antippen (mit dem Pen - oder auch mit der Maus - ist unerheblich), der eine spezielle Eingabesituation festlegt. Daraufhin sollte die Programoberfläche so angepasst werden, das alle für diese Eingabesituation erforderlichen Eingabefelder erscheinen und die nicht benötigten z.B. verschwinden (die ProgramHauptsteuerButtons sollten aber weitehin dennoch sichtbar und benutzbar bleiben.

Ich möchte damit den zur verfügung stehenden Platz (für graphische Anzeigen und Eingabefelder und weitere Steuerbuttons) möglichst optimal für die jeweilige Eingabesituation nutzen.

Dabei kommen eben viele verschiedene solcher Situationen vor und die Frage ist, wie man dies am besten programmiertechnisch umsetzt.

Die Auswahlbutton können auch links sein, aber am liebsten würde ich jedoch Elemente definieren, die immer (oder meist) zu sehen sind und andere, die situationsbedingt - eben in Abhängigkeit von der Vorauswahl - zu sehen und benutzten sind. Und wie macht man das am besten - eben mit ziemlich vielen unterschiedlichen dieser Situationen ?

Kannst Du mit meinem Erklärungsversuch etwas anfangen ? Sonst versuche ich es nocheinmal ausführlicher zu erklären.

Auf jeden Fall vielen Dank für die Hilfe
 
Ja ok ich habs verstanden :)

Also:
Du könntest UserControls für diese Eingabe programmieren/designen, dann machst du folgendes deine ganze Anwendung wird in ein Panel gesteckt, ich würde die Auswahlbuttons außerhalb des Panels legen und dann kannst du sehr einfach mit sehr vielen Formularen/Eingabemasken arbeiten und die Anwendung wird nicht unübersichtlich wenn du etwas Geduld hast ich kann dir heute Abend noch einen Beispielsource hochladen.
 
Hier der genannte Beispiel Code, ich habe ein Beispiel für VS 2003 und Sharp Develop gemacht, da ich nicht weiß, was du davon besitzt.
 

Anhänge

  • beispiel.zip
    44,4 KB · Aufrufe: 63
Hallo Counterfeit


Vielen Dank für dein Angebot :) . Wie funktioniert das mit dem Beispielsource hochladen ?

Mein Hauptproblem mit dem Panel-Ansatz ist, das ich ja zur Design-Zeit alle Panels auf der Form übereinander liegen habe. Wie behalte ich da den Überblick und wie schalte ich alle Panels auf visible = false und nur das eine gebraucht auf true. Dies ist natürlich einfach, wenn ich eine fest definierte Anzahl an Panels habe, aber bei meinem Anatz will ich im Lauf der Zeit aus der Erfahrung mit den Program lernen und es erweitern. Das bedeutet, das wahrscheinlich immer wieder neue Panels dazu kommen. Die müsste ich dann jeweils in der Liste der Panels, die als (visible = false) geführt werden ergänzen bzw. falls ein spezielles Panel sich als suboptimal erweist, wieder entfernen. Dies erschein mir umständlich. Gibt es einen Ansatz, wie bei den Eventhandlern, diese Funktion (invisibelSchalten) mit in eine grundlegende Panel-Klasse mitaufzunehmen, dann die jeweils konkrete Panel-Instanz mit einem Eventhandler auszustatten, der das Panel invisible schaltet. Nur zum Schluss würde dann das gewünschte Panel visible geschaltet. Mit der jeweiligen Instanz wäre dann auch dafür gesorgt, dass diese mit in der Liste der "invisible zu schaltenden Instanzen" aufgenommen ist und man bräuchte sich nicht um die Verwaltung dieser Liste kümmern.

Aber das löst noch nicht mein Problem, wie ich zur DesignZeit die ganzen Panels, die ja meist ungefähr an der gleichen Stelle (im Fenster des Programms) zu liegen kommen, gestalte und diese auseinander halte. Oder muss man dies dann nicht visuel machen? Aber da weiss ich nicht, wie das dann geht. bzw kann man die Panels visuel an verschiedenen Stellen erzeugen und sie dann später über ProgramCode an einer definierte Stelle erscheinen lassen

Fragen über Fragen - vieleicht gibt es ja auch noch einen viel leichteren Ansatz.
Falls Du da ein Upload hast, wäre ich Dir sehr dankbar - ich weiss nur nicht wie das mit dem upload hier funktioniert.

Jedenfalls vielen Dank für die Hilfe

PS: während ich den obigen Text geschrieben habe, ist deine 2te Antwort mit zip erschienen. Vielen Dank. :) :)
Ich habe Visual Studio 2003. Jetzt werde ich mir erst mal den zip ansehen
 
Zuletzt bearbeitet:
Aha :)

Aber 100%-ig habe ich es noch nicht durchschaut.

Aha, alles nur in einem Anzeige-Panel ! Dann könnte ich die zur Anzeige kommende Kombination aus Anzeige und SteuerElementen (Buttons, Labels, ...) woanders festlegen, also visuell designen (wo?) und dann diese Lösung als UserX in das Panel laden ?

Ich glaube, ich muß mir dein Beispiel noch genauer ansehen, bevor ich es richtig verstanden habe.

jedenfall vielen herzlichen Dank :) :)
 
Hallo,
deine ganzen Visuellen Sachen kannst du in den UserControl eintragen (Labels, Textboxen...) schau dir dazu UserControl1-4 an, veränder sie einfach und sie dir dann das Ergebnis an :) Die UserControls kannst du dann auch bennen wie du willst, sprich aus UserControl1 wird UserX etc. Halt das Visuelle und das auf den Formularen passieren soll, wird in den UserControls programmiert. Somit hast du auf der richtigen Hauptform eine Übersichtliche Oberfläche und musst nicht mit tausenden von bools arbeiten wie fenster.visivle = true etc.

Schau dir den Source einfach in Ruhe an wenn du noch weitere Fragen hast, ich stehe zur Verfügung :)

PS:
Das mit den Anhängen ist ganz einfach, wenn du einen Beitrag schreibst, schaust du weiter unten ist ein Feld mit "Dateianhang:" daneben befindet sich ein Button, mit diesem kannst du die Datei auswählen, die du, zu deinem Beitrag anhängen willst.
 
Zuletzt bearbeitet:
Hallo Counterfeit

Genial, das ist wirklich ! eine gute Lösung.:) Nochmal vielen Dank für die Hilfestellung. :) :)

Noch eine andere Frage, da ichgerade versucht habe eine DataGrid innerhalb einer Usercontrol mit Daten zu füllen:

Wenn ich innerhalb einer UserControl eine Datenbankverbindung benutzen will, muß diese dann für die UserControl definiert sein oder gibt es auch eine Möglichkeit die OleDbConnection und OleDbDataAdapter und DataSet für die HauptForm (Form1) festzulegen (also diese dort abzulegen) und dann von den UserControls aus auf dieses DataSet zuzugreifen ?

Wenn ich diese Verbindungen nämlich auf der HaupForm (Form1) anlege, kann ich sie nicht auswählen für ein innerhalb einer UserControl abgelegtes GataGrid (zumindest erscheint keine Auswahl unter der Property DataSource des DataGrids).
 
Also normal müsstest du die OleDB Sachen auf die Hauptform legen und sie als public definieren, damit du sie von jeder anderen Form füllen/bearbeiten kannst. Wenn du willst versuche ich wieder ein Beispiel zu machen ;)
 

Neue Beiträge

Zurück