2012-04-02 8 views
0

Ich habe ein neues Steuerelement aus einem System.Windows.Forms.TextBox abgeleitet, die auf seinem Client-Bereich ein Bild zeigt, wie Sie aus dem folgenden Bild sehen:Überlappendes Bild und Text in einer benutzerdefinierten TextBox vermeiden?

UnitTextBox

Hier ist der Code:

public partial class UnitTextBox: TextBox { 
    public UnitTextBox() { 
     TextAlign = HorizontalAlignment.Right; 
     InitializeComponent(); 
     Controls.Add(pictureBox1); 
     pictureBox1.Location = new Point(0, 0); 
    } 
} 

Wenn ich einige Zeichen hinzufüge, scrollt der Text nach links und geht unter das Bild. Gibt es eine Möglichkeit, den Textbereich aufzufüllen?

+1

Es ist unklar, wie Sie ein Bild im Kundenbereich anzeigen, weil Sie keinen Code geschrieben haben. – LarsTech

+0

Hallo @Lars, Code hinzugefügt. Danke – stenio

Antwort

0

Es klingt wie mit dem, was Sie versuchen, für Sie wäre einfacher zu tun, wenn Sie es ein Usercontrol gemacht:

MSDN - Inherit from the UserControl

in Visual Studio Im Allgemeinen Sie ein neues zu einem Projekt „Hinzufügen“ "Benutzerkontrolle", die fast wie ein Formular aussieht. Fügen Sie ein Panel oder eine PictureBox für Ihr Bild hinzu, und fügen Sie dann rechts daneben Ihre TextBox hinzu. Passen Sie das Formular so an, dass es nur Ihren Steuerelementen entspricht. Erstellen Sie einige Eigenschaften, um die Text-Eigenschaft der TextBox und möglicherweise eine Eigenschaft anzuzeigen, um das Bild festzulegen und anschließend zu kompilieren. Nach dem Kompilieren wird Ihr Benutzersteuerelement in Ihrer Toolbox angezeigt, als wäre es ein anderes Steuerelement.

2

Ich habe eine ähnliche Sache einmal gemacht. Der einfachste Weg, dies zu tun, ist ein Benutzersteuerelement wie BradRem vorgeschlagen, dann legen Sie eine Randlose TextBox in einem Panel mit der gleichen Hintergrundfarbe wie die TextBox. Auf der linken Seite in diesem Panel setzen Sie Ihr Icon. Als komplettes UserControl verhält sich das nun wie eine TextBox mit einem reservierten Bereich auf der linken Seite mit einem Icon darin.

Update:

Ich hatte dies für mich selbst zu testen und erstellt ein Benutzersteuerelement wie ich schon sagte. Darüber hinaus habe ich ein Paint-Ereignis zum Container-Panel, das die Grenze mit der gleichen Farbe wie die TextBox zieht:

public partial class UCTextBoxWithLabel : UserControl { 
     public UCTextBoxWithLabel() { 
      InitializeComponent(); 

      pnlTextBoxWithImage.Paint += new PaintEventHandler(pnlTextBoxWithImage_Paint); 
     } 

     void pnlTextBoxWithImage_Paint(object sender, PaintEventArgs pea) { 
      ControlPaint.DrawBorder(pea.Graphics, pea.ClipRectangle, Color.FromArgb(0x7f, 0x9d, 0xb9), ButtonBorderStyle.Solid); 
     } 
    } 

... und es sieht so ziemlich genau wie das gewünschte Ergebnis:

Screenshot of program

+0

Hi Pedery und @BradRem, ich habe versucht, von einem UserControl zu erben, aber der Steuerrahmen unterscheidet sich von einem normalen Fixed3D Rahmen eines TextBox. Ich habe eine Menge anderer TextBoxen auf den Formularen und das Mischen der beiden Rahmenarten ist nicht gut. – stenio

+0

Sie legen nur die Rahmeneigenschaft des Bereichs fest, wie ich oben in meiner Lösung beschrieben habe. – Pedery

+0

Ich habe die BorderStyle-Eigenschaft auf Fixed3D oder FixedSingle festgelegt, aber es sieht anders aus als der Rand einer normalen TextBox, wie Sie [hier] (http://www.b2s.it/temp/Immagine1.png) und [ hier] (http://www.b2s.it/temp/Immagine2.png). Dann habe ich auch versucht, die Picturebox und die Textbox in eine neue Textbox einzubetten. Auf diese Weise sieht die Umrandung in Ordnung aus, wenn das Steuerelement nicht ausgewählt ist, aber wenn sie den Fokus erhält, ändert die Umrandung ihre Farbe nicht! – stenio

Verwandte Themen