Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Form überschreiben
alf468
myCSharp.de - Member



Dabei seit:
Beiträge: 196

Themenstarter:

Form überschreiben

beantworten | zitieren | melden

Je nachdem ob der User Singleplayer oder Multiplayer auswählt soll eine andere Klasse geladen werden.Die Klassen habe ich jeweils in eine dll Datei geschrieben (ein komplettes Fenster) .Nun will ich aber dass sich kein neues Fenster öffnet sondern dass das alte Fenster mit dem Menü überschrieben wird. Also das gleiche als würde eine neue InitializeComponent() geladen werden.
Ich will hat diesen Übergangseffekt vermeiden wo sich ein Fenster schließt und ein neues öffnet.

@herbivore
Hatte mich verklickt X(
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Dann mach halt die Menüs dynamisch je nach Zustand (MenuItems adden oder removen)
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
alf468
myCSharp.de - Member



Dabei seit:
Beiträge: 196

Themenstarter:

beantworten | zitieren | melden

Mit Menü waren Buttons gemeint wo halt der Modus drauf steht und nicht die Menübar.Aber das mit dem löschen war mir schon klar nur wie lade ich die neuen Komponenten in die Form?
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Wenn die Unterschiede minimal sind (z.B: ein Button mehr oder so) dann mach diesen einfach unsichtbar (Visible=false) und nur bei Bedarf sichtbar.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
alf468
myCSharp.de - Member



Dabei seit:
Beiträge: 196

Themenstarter:

beantworten | zitieren | melden

Ein komplett neue Oberfläche will ich erstellen ,deswegen ja auch die dll Datei
private Nachricht | Beiträge des Benutzers
alf468
myCSharp.de - Member



Dabei seit:
Beiträge: 196

Themenstarter:

beantworten | zitieren | melden

Kann man einer Form keine andere Forum zuweisen?
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Zitat
Original von alf468
Kann man einer Form keine andere Forum zuweisen?

Sorry ich will Dich ja wirklich nicht beleidigen, aber ich empfehle Dir mal ein gutes Buch über .Net und OO zu lesen, damit Du mal die Grundkonzepte der OO-Entwicklung kennenlernst und nachher selber weisst was grundsätzlich möglich ist und was nicht.... auch wie man solche Probleme anpackt.... Hier wäre z.B: eine gemeinsame BasisKlasse für die 2 Forms eine Möglichkeit .... oder die Implementierung der Gemeinsamkeiten über Interfaces

Ich helfe wirklich gerne bei konkreten Programmierproblemen.... aber das coden kann ich Dir auch nicht beibringen

Gruss
Programmierhans

Edit: Ergänzung:

Um Dich jetzt aber nicht ganz im Regen stehen zu lassen....

Mach doch das ganze Design auf einem UserControl

Dann kannst Du zur Laufzeit je nach Modus das eine oder andere UserControl auf das (leere)Form pappen...
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
alf468
myCSharp.de - Member



Dabei seit:
Beiträge: 196

Themenstarter:

beantworten | zitieren | melden

Zitat
Original von Programmierhans
Sorry ich will Dich ja wirklich nicht beleidigen, aber ich empfehle Dir mal ein gutes Buch über .Net und OO zu lesen, damit Du mal die Grundkonzepte der OO-Entwicklung kennenlernst ...

Ein Buch kannst jedem Empfehlen der eine Frage hat und sich damit selber auseinandersetzten soll.
Aber Danke für den Tipp mit dem UserControl mal schauen wie das so geht
private Nachricht | Beiträge des Benutzers
Michael Schuler
myCSharp.de - Member



Dabei seit:
Beiträge: 329
Herkunft: Zürich, Schweiz

beantworten | zitieren | melden

Zitat
Original von alf468
Ein Buch kannst jedem Empfehlen der eine Frage hat und sich damit selber auseinandersetzten soll.
Aber Danke für den Tipp mit dem UserControl mal schauen wie das so geht

Das stimmt theoretisch, doch sind für C# nunmal grundlegende Kenntnisse in OO notwendig.
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Zitat
Original von michaelschuler

Das stimmt theoretisch, doch sind für C# nunmal grundlegende Kenntnisse in OO notwendig.

In diesen sauren (hoffentlich nicht mostindischen) Apfel muss jeder beissen.... Wenn man die Grundkonzepte mal verstanden hat dann kommen die konkreten Fragen wo wir auch helfen können....

Fragen wie: Was ist eine Instanz ... eine Klasse ... Property ... Methode... Vererbung... Interface usw... Also alles Base-Knowledge sollte man sich selber erarbeiten (Kurs / Buch / Privatlehrer 8))
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
Michael Schuler
myCSharp.de - Member



Dabei seit:
Beiträge: 329
Herkunft: Zürich, Schweiz

beantworten | zitieren | melden

Zitat
Original von Programmierhans
In diesen sauren (hoffentlich nicht mostindischen) Apfel muss jeder beissen....

Mostindische Äpfel sind nicht sauer
private Nachricht | Beiträge des Benutzers
alf468
myCSharp.de - Member



Dabei seit:
Beiträge: 196

Themenstarter:

beantworten | zitieren | melden

Das ist mir klar und ich bin auch vertraut mit der OO
Aber bei diesem Problem finde ich irgendwie keine Lösung und ich bin keiner von denen die direkt Fragen ohne vorher nachzudenken!!

Mir ist klar das wenn ich alles in eine Klasse schreibe es einfach ist die Form zu überschreiben.Aber ich habe nun mal eine 2.Klasse wo das 2.Fenster aufgebaut ist und dieses 2.Fenster möchte ich gerne in der 1.Form anzeigen lassen.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo alf468,

grundsätzlich kann man schon Controls von einem Fenster in eine anderes übertragen. Das folgende ist quasi eine Machbarkeitsstudie. Mit ist klar, dass es bei dir um zwei verschiedene Form-Klassen geht. Das ändert ja aber nichts prinzipielles. Ich denke am besten wäre es, alle zu übertragenden Controls auf ein Panel zu packen und nur das Panel zu transferieren.

Das du mit OO vertraut bist, sollte es kein Problem sein, meine Machbarkeitsstudie auf deinen konkreten Fall zu übertragen.


using System;
using System.Windows.Forms;
using System.Drawing;

public class MyWindow : Form
{
   const int iWidth      = 600;
   const int iHeight     = 480;
   const int iMargin     = 10;

   private Button   _pbDo;
   private MyWindow _mywin;

   public MyWindow (bool fFirst)
   {
      Control ctrlCurr;

      if (fFirst) {
         Text = "MyWindow 1";
      } else {
         Text = "MyWindow 2";
      }
      ClientSize = new Size (iWidth, iHeight);

      ctrlCurr = _pbDo = new Button ();
      ctrlCurr.Location = new Point (iMargin, iMargin);
      if (fFirst) {
         ctrlCurr.Location = new Point (iMargin, iMargin);
         ctrlCurr.Size = new Size (iWidth/2-2*iMargin, iHeight/2-2*iMargin);
         ctrlCurr.Text = "aus MyWindow 1";
         ctrlCurr.Click += new EventHandler (DoClick);
      } else {
         ctrlCurr.Location = new Point (iWidth/2+iMargin, iHeight/2+iMargin);
         ctrlCurr.Size = new Size (iWidth/2-2*iMargin, iHeight/2-2*iMargin);
         ctrlCurr.Text = "aus MyWindow 2";
      }
      Controls.Add (ctrlCurr);
   }

   protected void DoClick (Object objSender, EventArgs e)
   {
      if (_mywin == null) {
         _mywin = new MyWindow (false);
         _mywin.Show ();
         _mywin.Controls.Add (_pbDo);  // ≤= hier
      }
   }
}

abstract class App
{
   public static void Main (string [] astrArg)
   {
      Application.Run (new MyWindow (true));
   }
}
herbivore
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Hallo herbivore

Ein Form ist übrigens auch nur ein Control.... theoretisch kann man ein Form auf ein Form laden...

Form2 f2=new Form2();
this.Controls.Add(f2);

Hab's aber selber noch nie ausprobiert ... weil wer macht so was...
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Programmierhans,

ein Form ein Control wie alle anderen, aber es ist gleicher als die anderen (sprich es geht nicht):
Zitat
System.ArgumentException: Top-level control cannot be added to a control.
herbivore
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

TopLevel=false;

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Spiel mal damit rum herbivore



using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication10
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.Button button1;
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.button1 = new System.Windows.Forms.Button();
			this.SuspendLayout();
			// 
			// button1
			// 
			this.button1.Location = new System.Drawing.Point(0, 0);
			this.button1.Name = "button1";
			this.button1.Size = new System.Drawing.Size(128, 64);
			this.button1.TabIndex = 0;
			this.button1.Text = "button1";
			this.button1.Click += new System.EventHandler(this.button1_Click);
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(120, 61);
			this.Controls.Add(this.button1);
			this.Name = "Form1";
			this.Text = "Form1";
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void button1_Click(object sender, System.EventArgs e)
		{
			Form1 frm=new Form1();
			frm.TopLevel=false;
			frm.Location=new Point(0,this.ClientSize.Height);
			this.ClientSize=new Size(this.ClientSize.Width+frm.ClientSize.Width,this.ClientSize.Height+frm.Height);
			this.Controls.Add(frm);
			frm.Show();
		}
	}
}



Edit:

Ich hoffe Du klickst jetzt nicht den ganzen Abend darauf rum herbivore
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Programmierhans,

ok, überzeugt (auch ohne dein nettes Programm). Aber dann sollte man noch ein

FormBorderStyle = FormBorderStyle.None;

spendieren.

herbivore
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

Das Problem dabei ist das Verhalten der Tabulatortaste(Man kommt nicht mehr raus).
private Nachricht | Beiträge des Benutzers
alf468
myCSharp.de - Member



Dabei seit:
Beiträge: 196

Themenstarter:

beantworten | zitieren | melden

Eigentlich ganz logisch
Wenn ich die ganze Form hinzufüge sieht das ja nicht so schön aus (Form im Form ) ,deswegen habe ich mich lieber für das Panel entschieden.

Danke
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

Alternativ kann man den Oberflächenentwurf auch (fast)ausschliesslich in Usercontrols unterbringen. Damit ist eine höhere Flexibilität möglich(zu Lasten eines höheren Aufwands).
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Zitat
Original von ikaros
Alternativ kann man den Oberflächenentwurf auch (fast)ausschliesslich in Usercontrols unterbringen. Damit ist eine höhere Flexibilität möglich(zu Lasten eines höheren Aufwands).

genau (habe ich heute um 14:38 schon vorgeschlagen)... wobei halt der Aufwand wie Du auch sagst grösser ist... und z.B: DataBinding über ContainerGrenzen ist auch nicht ohne...
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Zitat
Original von alf468
Wenn ich die ganze Form hinzufüge sieht das ja nicht so schön aus (Form im Form ) ,deswegen habe ich mich lieber für das Panel entschieden.

Nur so am Rand das war auch kein ernstgemeinter Rat.. aber um mal ein wenig draufrummzuklicken und Fenster innerhalb des Fensters über mehrere Stufen zu minimiern usw wär mal was ganz neues :-)
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
Rainbird
myCSharp.de - Experte

Avatar #avatar-2834.jpg


Dabei seit:
Beiträge: 3.728
Herkunft: Mauer

Mvc

beantworten | zitieren | melden

Sowas lässt sich gut mit dem MVC Entwurfsmuster bauen. Je nach Kontext werden andere Views verwenden (z.B. UserControls die zur Laufzeit geladen werden).
private Nachricht | Beiträge des Benutzers