Ich habe im Internet gesucht, ich muss die falschen Suchbegriffe verwenden, da ich nichts finden kann. Ich möchte eine Textbox erstellen, deren Text etwas von links beginnt.
Genau so.
Wie Sie höchstwahrscheinlich festgestellt haben, verfügen Winforms-Textfelder über keine Auffüllungseigenschaften. Da Panels eine Padding-Eigenschaft freilegen, wäre eine Technik:
Damit sollten Sie anfangen. Sie können auch ein benutzerdefiniertes Steuerelement erstellen, das dasselbe wie oben beschrieben ausführt.
Falls Sie in asp.net von Textboxen gesprochen haben, verwenden Sie einfach CSS:input[type="text"] {padding: 3px 10px}
Nun, Sie können TrimLeft verwenden und dann mit 5 Leerzeichen verketten. Sie können auch ein benutzerdefiniertes UserControl mit einem randlosen TextBox-Element als eigentliches Eintragselement einrichten, das ein anderes TextBox-Fenster überblendet, das keinen Tabstop hat und den Fokus auf das randlose Textfeld verlagert, wenn es fokussiert ist.
OK, hier ist eine richtige Lösung. Setzen Sie zunächst Multiline
Ihres TextBox-Steuerelements auf true
.
Benötigt mit Anweisungen:
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
Code:
private const int EM_SETRECT = 0xB3;
[DllImport(@"User32.dll", EntryPoint = @"SendMessage", CharSet = CharSet.Auto)]
private static extern int SendMessageRefRect(IntPtr hWnd, uint msg, int wParam, ref RECT rect);
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public readonly int Left;
public readonly int Top;
public readonly int Right;
public readonly int Bottom;
private RECT(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
public RECT(Rectangle r) : this(r.Left, r.Top, r.Right, r.Bottom)
{
}
}
public void SetPadding(TextBox textBox, Padding padding)
{
var rect = new Rectangle(padding.Left, padding.Top, textBox.ClientSize.Width - padding.Left - padding.Right, textBox.ClientSize.Height - padding.Top - padding.Bottom);
RECT rc = new RECT(rect );
SendMessageRefRect(Handle, EM_SETRECT, 0, ref rc);
}
Rufe jetzt so an:
SetPadding(myTextBox, new Padding(5, 5, 5, 5));
Natürlich ist es am besten, ein eigenes TextBox-Steuerelement zu erstellen, das Multiline
automatisch auf true setzen und unerwünschte Zeilenumbrüche im Text usw. stoppen kann.
Diese Frage hat bereits eine Antwort empfohlen. Ich möchte auf jeden Fall eine alternative Antwort setzen. Um dem Textfeld in c # eine Auffüllung hinzuzufügen, können Sie die Methode "padLeft" verwenden. Hoffe das jemandem helfen.
textBox1.Text = "Hello";
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5);
or
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5, '*');
Ich weiß, das ist ein bisschen alt. Aber hier ist eine Lösung. Fügen Sie für den Anfangstext ein Leerzeichen am Anfang ein. Dann können Sie das OnKeyPress
-Ereignis überschreiben und den folgenden Code hinzufügen, damit Sie nicht zurückspulen können.
protected override void OnKeyPress (KeyPressEventArgs e) {
base.OnKeyPress (e);
if (e.KeyChar == (char)Keys.Back && Text.Length == 1) e.Handled = true;
else e.Handled = true;
}
Sie können die 1 durch die Anzahl der Leerzeichen ersetzen.
Erweiterung einer obigen Antwort und eines wahrgenommenen Nachteils, durch den aufgefüllten Wert zurückgehen zu können. Mit der SelectionStart-Eigenschaft des Textfelds kann festgelegt werden, wo der Cursor positioniert werden soll, wenn das TextChanged-Ereignis ausgelöst wird.
In diesem Beispiel wird das Textfeld am Anfang mit zwei Leerzeichen aufgefüllt, so dass die angezeigten Informationen mit anderen Steuerelementen ohne Eingabe übereinstimmen, bei denen die Auffüll-Eigenschaft verwendet wird.
private void textBox1_TextChanged(object sender, EventArgs e)
{
int pad = 2;
int cursorPos = textBox1.SelectionStart;
textBox1.Text = textBox1.Text.Trim().PadLeft(textBox1.Text.Trim().Length + pad);
textBox1.SelectionStart = (cursorPos > pad ? cursorPos : pad);
}