2009-10-13 5 views
1

J'ai besoin de code pour convertir la TextBox C# standard en température TextBox ce qui signifie ajouter "° C" à la fin du texte dans la zone de texte avec une autre couleur que la couleur par défaut.Temperature TextBox In C#

Répondre

7

Pour obtenir le symbole de degré, vous pouvez utiliser le code de caractère 176, par ex.

Char degree = (Char)176 

Vous pouvez ensuite ajouter ceci à votre contenu ou textbox je voudrais juste ajouter une étiquette à droite de la zone de texte avec le symbole de degré si vous souhaitez contrôler la forecolor facilement.

+1

Je pense qu'il est plus facile d'utiliser '" ° "', n'est-ce pas? – Groo

5

TextBox est un éditeur de texte brut. Pour obtenir des couleurs différentes, vous devez tourner autour d'une riche zone de texte. Pourquoi ne pas mettre le "° C" dans une étiquette positionnée à droite de la zone de texte? Cela rendrait également votre code d'analyse et de rendu beaucoup plus facile.

+0

+1, je suis d'accord, tout le reste est à peu près exagéré. – Groo

0

Vous pourriez probablement créer votre propre contrôle qui hérite de TextBox, puis surcharger la propriété Text pour ajouter automatiquement ° C bien que d'autres couleurs dans le même TextBox puissent poser problème. Pourquoi vous voulez avoir ° C dans TextBox?

Pourquoi? Ne peut-il pas être label juste après TextBox? Vous pouvez définir du texte et des couleurs statiques comme vous le souhaitez.

0

Les autres solutions proposées ici sont probablement suffisantes pour votre application; Cependant, si vous aviez la nécessité de mettre en œuvre ce avec réutilisabilité à l'esprit, voici une solution de contrôle personnalisé que vous pouvez étendre à mieux répondre à votre demande:

public class TemperatureTextBox : ContainerControl 
{ 
    private const int BORDER_SIZE = 1; 

    // Exposes text property of text box, 
    // expose other text box properties as needed: 
    public override string Text 
    { 
     get { return textBox.Text; } 
     set { textBox.Text = value; } 
    } 

    private TextBox textBox = new TextBox() 
    { 
     Text = string.Empty, 
     BorderStyle = BorderStyle.None, 
     Dock = DockStyle.Fill 
    }; 

    private Label label = new Label() 
    { 
     Text = "°C", 
     TextAlign = ContentAlignment.MiddleCenter, 
     Size = new Size() 
     { 
      Width = 32 
     }, 
     BackColor = SystemColors.Window, 
     Dock = DockStyle.Right 
    }; 

    public TemperatureTextBox() 
    { 
     this.BackColor = SystemColors.Window; 
     this.Padding = new Padding(BORDER_SIZE); 
     this.Controls.Add(label); 
     this.Controls.Add(textBox); 
     this.PerformLayout(); 
    } 

    // Constrain control size to textbox height plus top and bottom border: 
    protected override void OnResize(EventArgs e) 
    { 
     base.OnResize(e); 
     this.Height = (textBox.Height + (BORDER_SIZE * 2)); 
    } 

    // Render a border around the control: 
    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 
     e.Graphics.DrawRectangle(
      SystemPens.ControlDarkDark, 
      new Rectangle() 
      { 
       Width = (this.Width - BORDER_SIZE), 
       Height = (this.Height - BORDER_SIZE) 
      }); 
    } 
} 

Il suffit de créer une nouvelle classe et laisser tomber cette codez et reconstruisez votre solution. Il va créer un nouveau contrôle TemperatureTextBox dans la boîte à outils qui peut être déposé sur un nouveau formulaire et visuellement conçu.

Cet exemple expose la propriété Text de la zone de texte sous-jacente en remplaçant la propriété text du contrôle personnalisé. Vous souhaiterez peut-être exposer d'autres propriétés et événements en fonction de ce que votre application doit accomplir.