WinFuture-Forum.de: C-Sharp: Einem Objekt Aktionen Zuweisen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C-Sharp: Einem Objekt Aktionen Zuweisen


#1 Mitglied ist offline   Hauner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.297
  • Beigetreten: 03. Januar 05
  • Reputation: 0
  • Geschlecht:Männlich

  geschrieben 10. November 2005 - 19:31

Hallo liebe Community,

wie kann ich einem Objekt, zum Beispiel nachdem einer auf den entsprechenden Button geklickt hat, eine Aktion zuweisen? In meinem Fall soll ein anderes Fenster geöffnet werden.

Außerdem: Ich will zwei Optionsfelder bereitstellen. Wenn der Nutzer nun das erste Feld und darauf hin den Button anklickt, soll sich Fenster 1 öffnen, sollte er das zweite Feld selegiert haben, öffnet sich Fenster 2.

Könnt ihr mir Ratschläge geben, wie ich das geschickt in Code schreiben kann bzw. wie ich unter Microsoft Visual C# 2005 Express Edition vorgehen muss?

Grüße,
Hauner :wink:

PS: Es wäre gut, wenn ihr den dazu nötigenden Code (ab private void button1_Click(object sender, EventArgs e)) posten und die einzelnen Zeilen erläutern könntet. Es soll, abhängig von der Auswahl bei den Optionsfeldern, ein neuer Bereich des Programms geöffnet werden. Das Fenster soll aber nicht zusätzlich aufgerufen werden, sondern das alte ersetzen. Stellt es euch wie den nächsten Schritt eines Assistenten vor. Vielen Dank schon im Voraus! :)
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 11. November 2005 - 08:51

zu allererst...
Arbeite immer mit der API (F1 in VS). Dort kannst du alle Methoden, Properties... einer Klasse sehen.

In deinem Fall sind die Klassen Form, Button, CheckBox im Namespace System.Windows.Forms wichtig.

Bei CheckBox wirst du auf die Property "Checked" vom Typ bool stoßen, mit der du überprüfen kannst, ob so ein Feld selektiert wurde.
Das heißt also:
if (this.checkbox1.Checked)...


Dann wären wir beim zweiten Fenster öffnen.

Da du sicherlich meinem Tipp gefolgt bist und die Dokumentation offen hast, hast du die Methode Show() schon längst entdeckt, mit dem du das neue Fenster einzeigen lassen kannst.
Somit musst du nur
fenster.Show();
aufrufen. (Vergiss aber vorher nicht eine Instanz zu erzeugen, sonst wirst du auf eine NullPointerException hinauslaufen...)
In deinem Fall nimmst du aber lieber ShowDialog(). Sage dir nachher warum...

Schön...jetzt haben wir ein zweites Fenster offen, aber das alte wird ja noch angezeigt. hmm...

In der Dokumenation wirst du auf die Property Visible vom Typ bool stoßen.
Somit musst du, bevor du ShowDialog() aufrufst, Visible auf false setzen:
this.Visible = false;

So...und jetzt wird das erste Fenster nicht mehr angezeigt.

Jetzt müsste dir auffallen, dass immer noch etwas nicht stimmt...

Richtig, wenn du das zweite Fenster schließt, wird die Applikation nicht beendet.
Logisch...das erste Fenster, die MainForm läuft ja noch, du hast sie nur "unsichtbar" gemacht.
Nachdem das zweite offene Fenster geschlossen wurde, muss auch das erste Fenster geschlossen werden.
Das machst du mit:
this.Close();


Warum du in deinem Fall ShowDialog() benutzen musst ist, weil diese Methode die aktuelle Verarbeitung so lange unterbricht, bis das zweite Fenster geschlossen wurde.
Würdest du Show() benutzen und danach direkt this.Close() aufrufen, würde deine ganze Applikation direkt geschlossen werden.

Deine Methode könnte im Endeffekt dann so aussehen:
	private void button1_Click(object sender, EventArgs e)
	{
		this.Visible = false;
		if (this.checkBox1.Checked)
		{
			using (Form fenster = new Form())
			{
				fenster.ShowDialog();
			}
		}
		
		else if (this.checkBox2.Checked)
		{
			using (Form fenster = new Form())
			{
				fenster.ShowDialog();
			}
		}
		
		this.Close();
	}


Eine andere vielleicht sogar bessere Lösung wäre, dass du das alles in einem Fenster erledigst. Beim klicken einfach die alten Elemente auf visible bzw enable = false setzen und die neuen anzeigen lassen. Aber das ist natürlich im Endeffekt dir überlassen.

So..ich hoffe ich konnte dir etwas helfen.

Witi

Dieser Beitrag wurde von Witi bearbeitet: 11. November 2005 - 08:54

0

#3 Mitglied ist offline   Hauner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.297
  • Beigetreten: 03. Januar 05
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 12. November 2005 - 11:43

Hey, vielen Dank! Ich werde mich nacher gleich mal an meine App setzen. Nur habe ich das Problem, wenn ich das Projekt speichere (als Projekt speichern), dann finde ich keinen Eintrag mehr zum Öffnen (zum Beispiel der Komponente Form1.cs [Design]).
0

#4 Mitglied ist offline   Hauner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.297
  • Beigetreten: 03. Januar 05
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 13. November 2005 - 14:00

		private void button1_Click(object sender, EventArgs e)
		{
			FolderBrowserDialog fdb = new FolderBrowserDialog();
			fdb.Description = "Wählen Sie den Ordner, in dem Sie die Sicherung Ihrer Aktivierung abgelegt haben.";
			fdb.ShowNewFolderButton = true;
			if (fdb.ShowDialog() == DialogResult.OK)
			{
				fdb.SelectedPath = Source.Text;
			}
		}
Wieso wird der über FolderBrowserDialog ausgewählte Pfad nicht in die Textbox namens Source eingetragen?

Gibt es eine Möglichkeit, zu verhindern, dass der Nutzer das Fenster mit Hilfe der Pfeile an den Rändern skaliert, also die Fenstergröße seinen Wünschen anpasst?

Für den dritten Schritt würde ich außerdem einen Kopierbefehl benötigen, zuvor sollte aber gepürüft werden, ob in dem vom Benutzer gewählten Pfad eine bestimmte Datei existiert. Wenn nicht, soll ein anderes Fenster (eine Fehlermeldung) aufgerufen werden.

Vielen Dank schon im Voraus,
Hauner :blush:

Dieser Beitrag wurde von Hauner bearbeitet: 13. November 2005 - 14:16

0

#5 Mitglied ist offline   stefanra 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.208
  • Beigetreten: 13. September 04
  • Reputation: 1

geschrieben 13. November 2005 - 14:46

Da dein MSN irgendwie nicht reagiert, hier die Lösung.

ad 1: Kann auch nicht gehen, da im Code ein Fehler ist. Jetzt wird der ausgewählte Pfad mit dem Text der Textbox überschrieben und nicht umgekehrt. Es muss daher Source.Text = fdb.SelectedPath; lauten.

ad 2: Das macht die Eigenschaft "Anchor" bei den Objekten.

ad 3:

if (System.IO.File.Exists(path))
			{
				// Datei ist existent, Aktion durchführen
				System.IO.File.Copy(source, dest);
			}
			else
			{
				MessageBox.Show("Die Datei \"" + path + "\" existiert nicht.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
			}

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0