Laden...

Button.Text aktualisiert im GUI nicht

Erstellt von dmnjkr vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.802 Views
D
dmnjkr Themenstarter:in
6 Beiträge seit 2016
vor 8 Jahren
Button.Text aktualisiert im GUI nicht

Hallo,
da ich schon gegooglet und rumprobiert habe wie sonstwas stelle ich nun mal hier meine Frage, in der Hoffnung, dass ihr mir helfen könnt. 😃

Info vorab: Die Methode läuft komplett durch, das habe ich schon mit einem "console.write" ausprobiert.

Problem: Die Methode soll einen Text in den Buttontext hineinschreiben. Ich habe mir das schon in die Console schreiben lassen und dadurch festgestellt, dass der Button.Text geändert, nur die Änderung grafisch also im GUI nicht dargestellt wird. Hier mal mein Code.

Teil der Form mit der Methode, die den Button ändert:

public void buttonSetup(string button, string name, string path)
        {
            button1.Text = name;
            button1.Name = path;   
        }

Teil der Form mit dem Button, der die Methode auslöst:

private void button2_Click(object sender, EventArgs e)
        {
            aumed.buttonSetup(bname, dname, dpath);
            this.Close();
        }

Hoffe ihr könnt mir helfen..

Gruß Mo

5.299 Beiträge seit 2008
vor 8 Jahren

klingt alles ganz i.o., nur stutzig macht mich das this.Close();.

evtl. wird da ein anderer Button um-beschriftet, aber das siehst du nicht, weils Form schon closed ist.

lass doch mal das this.Close weg, und guck, ob sich iwas verdächtiges zeigt.

Der frühe Apfel fängt den Wurm.

D
dmnjkr Themenstarter:in
6 Beiträge seit 2016
vor 8 Jahren

Ne, es ändert sich nichts. Das "this.close()" ist auch eigentlich nur dafür da, meine Auswählen-Form zu schließen.

5.299 Beiträge seit 2008
vor 8 Jahren

ok, aber ganz generell kanns ja eiglich nicht anders sein, als das du den falschen Button um-beschriftest.

ob du nun ein Form geladen hast, aber nciht angezeigt oder was auch immer.

oder der button ist aus sonst einem Grund nicht sichtbar.

oder button1 ist überhaupt kein button.

mach dich drauf gefasst: es wird iwas dummes sein. 😉

Der frühe Apfel fängt den Wurm.

D
dmnjkr Themenstarter:in
6 Beiträge seit 2016
vor 8 Jahren

Ich glaub langsam ich bin echt zu blöd... button1 ist als Button definiert und existiert definitiv. Außerdem ändert er ja auch Text und Name(egal bei welchem Button ich es probiere), es wird halt nur nicht angezeigt.

795 Beiträge seit 2006
vor 8 Jahren

Hast du den Button korrekt zu irgendeinem Control hinzugefügt? d.h. siehst du den button?

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
D
dmnjkr Themenstarter:in
6 Beiträge seit 2016
vor 8 Jahren

Jup, ich hab den in 'nem Flowlayoutpanel und sehe den auch, sowie die anderen 35 Buttons.

3.003 Beiträge seit 2006
vor 8 Jahren

Klingt für mich nach so etwas hier:


void Example(Button button)
{
    button = new Button();
    button.Name = "Beispiel";
}

Falls ich richtig liege, solltest du dir Parameterübergabe by reference und by value mal anschauen (ich meine nicht das Schlüsselwort ref).

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

5.657 Beiträge seit 2006
vor 8 Jahren

Hi dmnjkr,

aumed.buttonSetup(bname, dname, dpath);  

Interessant wäre hier vor allen, welche Werte die Variablen bname, dname, dpath bzw. (in der buttonSetup-Methode) button1 haben. Das kannst du sehr leicht mit dem Debugger herausfinden: [Artikel] Debugger: Wie verwende ich den von Visual Studio?. Dann sollte auch klar werden, was dort passiert - oder eben nicht passiert.

Christian

Weeks of programming can save you hours of planning

D
dmnjkr Themenstarter:in
6 Beiträge seit 2016
vor 8 Jahren

@MrSparkle: Erstmal danke für deine Antwort 😃 Ich habe das jetzt soweit überprüft und festgestellt, dass das soweit so ist wie es sein sollte.

Vielleicht könnt ihr mir ja besser helfen, wenn ich den kompletten Code der betreffenden Klassen einstelle..

AulaMedia.cs(ich habe ein bisschen was geändert)

namespace AulaManager
{
    public partial class AulaMedia : Form
    {
        public AulaMedia()
        {
            InitializeComponent();
        }

        Auswaehlen aw;

        public void buttonSet(string button, string name, string path)
        {
            button1.Text = name;
        }

        private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            if(e.Button == MouseButtons.Right)
            {
                aw = new Auswaehlen();
                aw.Show();
            }
        }
    }
}

Auswaehlen.cs(auch hier Teile geändert)

namespace AulaManager
{
    public partial class Auswaehlen : Form
    {
        public Auswaehlen()
        {
            InitializeComponent();
        }

        AulaMedia aumed = new AulaMedia();

        OpenFileDialog opf1 = new OpenFileDialog();

        private void button1_Click(object sender, EventArgs e)
        {
            opf1.ShowDialog();
            textBox1.Text = System.IO.Path.GetFileName(opf1.FileName);
            textBox2.Text = opf1.FileName;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            aumed.buttonSet("placehold", textBox1.Text, textBox2.Text);   
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

Gruß Mo

1.040 Beiträge seit 2007
vor 8 Jahren
AulaMedia aumed = new AulaMedia();

😉

5.657 Beiträge seit 2006
vor 8 Jahren

Weeks of programming can save you hours of planning

5.299 Beiträge seit 2008
vor 8 Jahren

@p!lle: Ich denke, son krypto-post bringt nix, ausser dass der TE sich dumm fühlt.

Ansonsten stimmt schon, dort wird ein AulaMedia erstellt, was ja ein Form ist, aber das Form wird nirgends angezeigt - seine .Show()-Methode nirgends aufgerufen.
Also sieht man auch nix, wenn man einen Button darauf neu betextet.

@TE: Ich denke, du musst einige Grundlagen dir erarbeiten, etwa die Bedeutung des Schlüsselwortes new, und das dahinter stehende OOP-Konzept, dass es normalerweise von jeder Klasse beliebig viele verschiedene Objekte geben kann.

Ohne derlei Grundlagen binnich pessimistisch, ob das Form2Form - Tut dir was bringt, oder genügend bringt, dass du das Prob gelöst kriegst.

Der frühe Apfel fängt den Wurm.

4.931 Beiträge seit 2008
vor 8 Jahren

Hallo dmnjkr,

vllt. hilft dir dann eher mein Artikel dazu: Kommunikation von 2 Forms (s. "Typische Anfängerfehler" / "1. Neues Form-Objekt erstellen")

D
dmnjkr Themenstarter:in
6 Beiträge seit 2016
vor 8 Jahren

@Th69 Danke dir 😃 Mit deiner Anleitung hats geklappt.