2012-03-29 5 views
4

Ich habe eine benutzerdefinierte Steuerschaltfläche durch Erweitern der System.Windows.Forms.Button-Klasse erstellt.Erweitern Sie eine System.Windows.Forms.Button, und ändern Sie den Standardtext in C#

Ich habe den Standard .Text .Width und .Height im Konstruktor der neuen Klasse festgelegt.

Wenn ich dieses Steuerelement auf ein Formular lösche, ist die IDE intelligent genug, um die im Konstruktor angegebene Breite und Höhe zu beachten und diese Eigenschaften der neuen Schaltfläche zuzuweisen, ignoriert jedoch die Eigenschaft Text und weist sie zu der Text der Schaltfläche zu "ucButtonConsumables1"

Gibt es eine Möglichkeit, den .Text auf einen Standardwert meiner Wahl festzulegen?

public partial class ucButtonConsumables : System.Windows.Forms.Button { 
    public ucButtonConsumables() { 

     this.Text = "Consumables";     
     this.Width = 184; 
     this.Height = 23; 

     this.Click += new EventHandler(ucButtonConsumables_Click); 

    } 

    void ucButtonConsumables_Click(object sender, EventArgs e) { 

     MessageBox.Show("Button Clicked") 

    } 

} 
+0

Did Sie starten das Programm und prüfen, ob der Text wh ist bei dir gemeint? Ich denke, Sie überprüfen dies im Designer, sollte nicht der Fall sein, wenn Sie es ausführen würden – V4Vendetta

+0

Sie versuchen, den benutzerdefinierten Designer für eine Schaltfläche zu kämpfen. Diesen Kampf zu gewinnen ist nicht einfach, du versuchst etwas sehr * Ungewöhnliches. Es macht wenig Sinn, * jeder * Taste den gleichen Text zu geben. –

+0

Ja - ich kämpfe definitiv gegen den Designer. Der Designer weist dem Steuerelement einen Namen zu und möchte die Eigenschaft .Text demselben zuweisen. – timothy

Antwort

0

Sie müssen die Text-Eigenschaft in der abgeleiteten Klasse ändern, um sie zu ändern.

public override string Text { get; set; } 
+0

Beim Überschreiben der Eigenschaft wird der Wert nicht festgelegt. Wenn das Steuerelement geladen wird, wird die Eigenschaft Text zurückgesetzt. – Prakash

0

Ja, das ist im Konstruktor nicht möglich. Wenn Sie sicher sind, dass der Wert nicht mehr geändert wird, machen Sie es auf diese Weise. Überschreiben der Texteigenschaft und Zurückgeben der Konstante

public override string Text 
    { 
     get 
     { 
      return "Consumables"; 
     } 
     set 
     { 
     } 
    } 
2

ausblenden Eigenschaft Text von Designer-Serialisierung:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
public override string Text 
{ 
    get { return base.Text; } 
    set { base.Text = value; } 
} 

Oder erstellen Designer mit Standardwerten:

public class ConsumablesButtonDesigner : System.Windows.Forms.Design.ControlDesigner 
{ 
    public override void OnSetComponentDefaults() 
    { 
     base.OnSetComponentDefaults(); 
     Control.Text = "Consumables"; 
    } 
} 

Und das Designer auf Ihre Schaltfläche zur Verfügung stellen:

[Designer(typeof(ConsumablesButtonDesigner))] 
public class ucButtonConsumables : Button 
{ 
    //... 
} 
+0

Die erste Option muss kompiliert werden, um den Standardtext der Schaltfläche zu aktualisieren. –

+0

Die zweite Methode oben funktioniert sehr gut. Die erste Methode, einschließlich Clean Rebuild usw., funktionierte nicht für mich, aber möglicherweise mit Ausdauer. – timothy

+0

@timothy für die erste Methode zu arbeiten, müssen Sie das Projekt kompilieren. Nach der Kompilierung wird der Standard-Designer-Text durch Ihren ersetzt –