Autor Beitrag
Icedragon2k
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 15.08.16 01:54 
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:

ausblenden 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:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
           //Form Groesse anzeigen
            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
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 15.08.16 06:27 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Icedragon2k Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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!
ausblenden 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:
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
           //Form Groesse anzeigen
            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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
           //Form Groesse anzeigen
            Groesse Groesse = new Groesse();
            Groesse.NeueBreite = this.toolStripStatusLabel1.Text;
            Groesse.NeueHoehe = Convert.ToString(pictureBox1.Height);

            if (Groesse.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // hier der Code wenn auf OK geklickt wurde
            }
            else
            {
                // hier der Code wenn abgebrochen wurde 
            }


Den oberen Teil kannst du noch etwas schöner schreiben, da hilft dir das object initializer Verfahren:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
           //Form Groesse anzeigen
            Groesse Groesse = new Groesse
            {
                NeueBreite = this.toolStripStatusLabel1.Text;
                NeueHoehe = Convert.ToString(pictureBox1.Height);
            };

            if (Groesse.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // hier der Code wenn auf OK geklickt wurde
            }
            else
            {
                // hier der Code wenn abgebrochen wurde 
            }


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.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler

Für diesen Beitrag haben gedankt: Icedragon2k
Icedragon2k Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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 :)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 16.08.16 00:45 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Icedragon2k