Autor Beitrag
Ccenter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Fr 08.10.10 17:41 
Hallo,
Ich versuche gerade eine grafische Oberfläche zu entwerfen die einem Setup ähnelt. Im Klartext: Ich habe eine Oberfläche, klicke auf "Weiter" und der Inhalt des Fensters ändert sich.
Bis jetzt habe ich das mit Panels gelöst die überlagert lagen. Diese habe ich dann nach belieben unsichtbar gemacht.
Jetzt bräuchte ich aber für mein Vorhaben um die 7-8 Panels und das wird absolut unpraktisch die alle zu überlagern. Ich möchte die Objekte aber auch nicht alle manuell zeichnen lassen. Gibt es da keine andere Möglichkeit?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 08.10.10 19:10 
Hallo!

Erstelle für jede "Seite" in der Installation doch ein eigenes UserControl. Dann lädst Du beim Klick auf "weiter" immer das entsprechende UserControl.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Ccenter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Fr 08.10.10 22:19 
Danke, ist schonmal sehr hilfreich.
Jedoch hab ich jetzt ein Problem. Auf meinem UserControl ist eine Textboxt die ich später von meiner Form aus ansprechen möchte.

Und das geht ja schlecht :D: userControl1.textBox1.text...
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 08.10.10 22:24 
Ich kenne Dein Konzept nicht, aber Du solltest über eine Kapselung nachdenken. Wenn Du z.B. auf einer Seite des Assistenten ein Verzeichnis auswählen lässt, dann sollte das UserControl eine Eigenschaft "Directory" haben, welche nach außen (also auch zur Form) sichtbar ist.

Wie die Eigenschaft im UserControl gefüllt wird, ist dann eine interne Angelegenheit. Das kann eine TextBox sein, oder ein Verzeichnis-Auswahldialog. Aber das ist für die Form, die nur das Endergebnis benutzt, ja dann ziemlich wurscht.

Also hast Du im UserControl z.B.:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
public string Directory {
  get {
    return directoryTextBox.Text;
  }
}


Und in der Form dann:
ausblenden C#-Quelltext
1:
userControl1.Directory					


Wenn Du nun die Interna im UserControl änderst, bleibt der Code in der Form davon unberührt.

Btw kannst Du vielleicht einen etwas sprechenderen Namen statt "userControl1" wählen :D

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Ccenter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Sa 09.10.10 11:00 
Bezüglich des Konzepts: Ich arbeite gerade an einer Gui für mein Chatprogramm was ich ja vor kürzer Zeit erst in einer Console realisiert hatte. Am Ende sollte das ca so aussehen:
Ich habe eine große Form. Auf der rechten Seite ist eine Spalte in der mehrer Labels sind. Z.B. "Chat", "Einstellungen" usw. Auf der linken Seite soll dann eine große Textbox sein um Text zu empfangen. Diese würde ich in ein Usercontrol verschieben um da dann ausserdem eine zweite Textbox unter zu bringen um Text zu versenden. Dazu dann noch einen Button. Im Endeffekt das Chatfenster.
Dieses Usercontrol möchte ich dann unsichtbar machen sobald man in der Spalte auf "Einstellungen" klickt. Statt dem Chatfenster sollen dann Einstellmöglichkeiten erscheinen. Das wäre zwar auch über ein Menustrip machbar aber ich möchte das unter anderem aus lernzwecken jetzt mal versuchen so zu realisieren.

Die Textboxen in ein Usercontrol zu legen erschwert jetzt natürlich die Sache weil die Form ja immer den Text empfängt und weiterleiten muss etc. Das Probelm würde aber auch an anderen Stellen auftreten deshalb möchte ich den Code auch nicht innerhalb der Usercontrols programmieren. Sind für mein Vorhaben die Userkontrols trotzdem die richtige Wahl oder gibt es da noch alternativen? Ein Tabcontrol möchte ich nicht verwenden. Ich würde gerne bei den anzuklickenden labels bleiben =)

Im endeffekt möchte ich von der Form auf mein Usercontrol zu greifen nicht anders herum.
Auf die Bezeichnung werde ich in Zukunft achten ;)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 09.10.10 11:44 
UserControls sorgen für eine bessere Kapselung, d.h. du hast nicht den gesamten Code in einer Klasse (bzw. Form) stehen. Und die Übergabe von Daten machst du dann - wie Christian schon geschrieben hat - mittels Eigenschaften bzw. spezieller Methoden.

Ein Vorlage für ein ähnliches Projekte gibt es unter Mit Forms eine Art Frameset einer Website nachbauen? (Navigation, Wizard, Assistent)
Dort sind weiter unten auch weitere Links zu anderen Ansätzen...

Falls du doch Daten von den untergeordneten userControls an das Hauptform übergeben willst, dann eignen sich dafür Ereignisse (Events): Eigenen Event definieren / Information zu Events