Laden...

Button dauerhaft mit einem Text versehen

Erstellt von Martinar vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.144 Views
Thema geschlossen
M
Martinar Themenstarter:in
55 Beiträge seit 2010
vor 13 Jahren
Button dauerhaft mit einem Text versehen

Hallo,
Ich habe folgendes Problem:

Ich möchte ein Control schreiben, wobei die Texteigenschaft im Control festgelegt wird und nicht auf einer Form veränderbar ist.
Ich habe nun folgenden Code:

public class PushButton: Button
    {
        private string t = "OK";
        public PushBUtton()
        {
            this.InitializeComponent();
        }
        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // PushButton            // 
            this.Text = t;
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.ResumeLayout(false);

        }
    }

Doch so bald ich das Neue Control auf eine Form ziehe, steht PushButton1 als TEXT da.
Was mache ich falsch?

T
708 Beiträge seit 2008
vor 13 Jahren

Hallo Martinar,

du machst dort nichts falsch. Das ist die Logik des Designers.
Es ist ja schließlich möglich mehrere Controls von ein und dem selben Typ auf die Form zu ziehen.
Was, wenn nun alle den selben Namen hätten? Man könnte die Buttons nicht mehr unterscheiden.

Daher ist VisualStudio (und auch alle anderen Programme) so "schlau" und zieht den Namen des Control heran und nummeriert diesen laufend durch.

Nun ist es eine weitere Eigenheit, dass der Designer ebenfalls den Text anpasst, damit du gleich im Design erkennst um welches Control es sich handelt.

So viel zu dem Grund, eine Lösung habe ich aber leider nicht parat. Das wird wahrscheinlich eine Einstellung im VisualStudio sein.

Gruß,
TriB

F
10.010 Beiträge seit 2004
vor 13 Jahren

Die Lösung ist recht simple.

Überschreibe das Textproperty.

M
Martinar Themenstarter:in
55 Beiträge seit 2010
vor 13 Jahren

Irgendwie geht das nicht , ich habe nun folgenden code aber im Desinder passiert nichts:

 public Pushbutton()
        {
            this.InitializeComponent();
        }
        public override string Text
        {
            get
            {
                return base.Text;
            }
            set
            {
                base.Text = value;
            }
        }
        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // PushBUtton            // 
            this.Text = "OK";
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.ResumeLayout(false);

        }
Hinweis von herbivore vor 13 Jahren

[****CSHARP]-Tags hinzugefügt. Bitte immer von alleine daran denken.

2.223 Beiträge seit 2005
vor 13 Jahren

Hallo Martinar,

zum einen Wäre es schön wenn Du die Code Tags für Quell-Code verwendest
(diese findest Du oben in der Toolbar)
das macht das lesen doch etwas einfacher.

zu deiner Frage:

stell Dir doch einmal vor wie der Ablauf ist

Der Designer erzeugt dein Control
ctor von deinem Control => dieser ruft die InitializeComponent Methode innerhalb deines Controls auf (Text steht auf OK)

danach erfolgt im InitializeComponent des Forms, die Zuweisung des
PushButton1.Text = "PushButton1"; (Text steht auf PushButton1)

und wie immer der zuletzt zugewiesene Wert gewinnt dieses Spiel.

Viele Grüße
Lars

731 Beiträge seit 2006
vor 13 Jahren

Leite einfach von System.Windows.Forms.Button ab und überschreibe innerhalb dieser Ableitung die Text-Eigenschaft.

Schon hast du es...

Mfg
wax

360 Beiträge seit 2005
vor 13 Jahren

Moin,

Noch eine Anmerkung zu deiner Überschreibung:

public override string Text {
    get { return base.Text; }
    set { base.Text = value; }
}

Damit hast du nichts gewonnen, denn du überschreibst den Code zwar, greifst aber trotzdem auf die Implementierung der Basisklasse zurück - da kannst du dir das überschreiben auch sparen.

Einen eigenen (unveränderlichen) Text erreichst du folgendermaßen:

public override string Text {
    get { return "Mein Text" }
    set { }
}

Die Thematik Properties und Methoden zu überschreiben gehört allerdings zu den Grundlagen des Programmierens mit C# und dem .NET-Framework...

Viele Grüße,
Markus 😃

M
Martinar Themenstarter:in
55 Beiträge seit 2010
vor 13 Jahren

Vielen Dank,
es funktioniert.
Ja ich glaube ich sollte mir noch Mal die Grundlagen einverleiben.

Thema geschlossen