Entwickler-Ecke
WinForms - Übergabe der Größe aus Form2
Icedragon2k - Mo 15.08.16 01:54
Titel: Übergabe der Größe aus Form2
Hallo zusammen,
ich stehe ganz gewaltig auf dem Schlauch.
Ich habe eine Form2 mit zwei TextBoxen (TextboxHoehe, TextboxBreite) und einen OK-Button.
Jetzt möchte ich diese TextBoxen an Form1 übergeben und eine Picturebox mit den neuen Größen neu Zeichnen lassen.
Ich komme hier aber auf keinen grünen Zweig.
Ich habe versucht auf die TextBoxen über Set zuzugreifen um eine saubere Variabelnutzung zu gewährleisten,
aber ich bekomme die Übergabe zu Form1 nicht hin, damit eine neue Picturebox gezeichnet wird.
Könnt Ihr mir hier weiterhelfen ?
Mein bisheriger Versuch:
Form2:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public string NeueBreite { set { this.textBoxBreite.Text = value; } }
public string NeueHoehe { set { this.textBoxHoehe.Text = value; } } |
Form1:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Groesse Groesse = new Groesse();
if (Groesse.ShowDialog() == System.Windows.Forms.DialogResult.OK) Groesse.NeueBreite = this.toolStripStatusLabel1.Text; Groesse.NeueHoehe = Convert.ToString(pictureBox1.Height); Groesse.ShowDialog(); |
Vielen Dank im voraus.
MfG
Icedragon2k
Delete - Mo 15.08.16 06:27
- Nachträglich durch die Entwickler-Ecke gelöscht -
Icedragon2k - Mo 15.08.16 12:30
Hallo Frühlingsrolle,
erstmal danke für die Infos :)
Aber irgendwie komme ich nicht weiter oder stehe gerade ganz gewaltig auf dem Schlauch :(
Ich wollte eigentlich mit der zweiten Form eine Benutzereingabe erzwingen.
Der Benutzer soll in die Textboxen die Höhe und Breite eintragen und daraus soll ein neues Bild in einer
Picturebox erzeugt werden.
Aktuell wenn ich auf Neu klicke in der Form1 wird ein neues Bild in Größe und Breite der Picturebox erzeugt.
Dies wollte ich mit den Textboxen so abändern, dass ein Bild mit den Benutzereingaben der Textboxen erzeugt wird.
Bin ich denn gerade so blöd ?
MfG
Icedragon2k
C# - Mo 15.08.16 14:04
Halli Hallo und :welcome:
Zitat: |
Bin ich denn gerade so blöd ? |
Nope bist du nicht. Frühlingsrolle hat dich einfach nur falsch verstanden.
Also was mir bei deinem Code auffält ist:
1. Die Properties
NeueBreite und
NeueHöhe haben keinen Getter, d.h. du kannst sie nur setzen, aber nicht abfragen!
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| public string NeueBreite { set { this.textBoxBreite.Text = value; } get { return this.textBoxBreite.Text;} }
public string NeueHoehe { set { this.textBoxHoehe.Text = value; } get { return this.textBoxHoehe.Text; } } |
Dass hierbei die Text Property der Textboxen getunnelt wird finde ich jetzt nicht so schlimm. In WinForms ist UI und Code sowieso viel zu eng verdrahtet.
2. Du rufst die Form
Groesse 2x auf:
C#-Quelltext
1: 2: 3: 4:
| if (Groesse.ShowDialog() == System.Windows.Forms.DialogResult.OK) Groesse.NeueBreite = this.toolStripStatusLabel1.Text; Groesse.NeueHoehe = Convert.ToString(pictureBox1.Height); Groesse.ShowDialog(); |
Das zweite mal kannst du dir schenken, da die Form schon bei der ersten Markierung geöffnet wird. Daher ergeben sich diese Folgeprobleme:
2.1 Du öffnest die Form und wartest mit
ShowDialog() darauf, dass sie geschlossen wird. Erst wenn die Form geschlossen wird, werden deine Werte an sie übergeben, was dann logischerweise zu spät ist.
2.2 Der if-Block hat keine Klammern, was bedeutet, dass nur die nächste Zeile von der if-Bedingung abhängig ist, sprich:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Groesse Groesse = new Groesse();
if (Groesse.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Groesse.NeueBreite = this.toolStripStatusLabel1.Text; } Groesse.NeueHoehe = Convert.ToString(pictureBox1.Height); Groesse.ShowDialog(); |
Damit dein Code funktioniert, müsste er ungefähr so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Groesse Groesse = new Groesse(); Groesse.NeueBreite = this.toolStripStatusLabel1.Text; Groesse.NeueHoehe = Convert.ToString(pictureBox1.Height);
if (Groesse.ShowDialog() == System.Windows.Forms.DialogResult.OK) { } else { } |
Den oberen Teil kannst du noch etwas schöner schreiben, da hilft dir das
object initializer [
https://msdn.microsoft.com/en-us/library/bb384062.aspx] Verfahren:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| Groesse Groesse = new Groesse { NeueBreite = this.toolStripStatusLabel1.Text; NeueHoehe = Convert.ToString(pictureBox1.Height); };
if (Groesse.ShowDialog() == System.Windows.Forms.DialogResult.OK) { } else { } |
Die Funktion des Codes ist die selbe, es ist nur eine andere schreibweise.
Natürlich musst du dann bei deinem Button Click Event in der Form
Groesse auch
DialogResult = DialogResult.OK setzen, bevor du die Form wieder schließt.
Icedragon2k - Mo 15.08.16 22:55
Hallo C#,
vielen Dank für die Hilfe,
da stand ich wirklich auf dem Schlauch.
Habe es endlich hinbekommen, manchmal sieht man den Wald vor lauter Bäumen nicht :)
Delete - Di 16.08.16 00:45
- Nachträglich durch die Entwickler-Ecke gelöscht -
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!