インターネットで検索しましたが、何も見つからないため、間違ったキーワードを使用しているに違いありません。左から少し離れたところから始まるテキストを含むテキストボックスを作成します。
そのように。
ご存知のとおり、Winforms Textboxesにはパディングプロパティがありません。 PanelsはPaddingプロパティを公開するので、1つの手法は次のようになります。
これで始められるはずです。上記と同じことを行うカスタムコントロールを作成することもできます。
Asp.netのTextboxについて話している場合は、CSSを使用してください。input[type="text"] {padding: 3px 10px}
まあ、あなたはTrimLeftをしてから、5つのスペースで連結することができます。または、境界線のないTextBoxを実際のエントリ要素としてカスタムUserControlを設定し、タブストップのない別のTextBoxをオーバーレイして、フォーカスがあると境界線のないTextBoxにフォーカスを移すことができます。
OK、これが適切な解決策です。まず、TextBoxコントロールのMultiline
をtrue
に設定します。
ステートメントを使用して必要:
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
コード:
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);
}
次のように呼び出します:
SetPadding(myTextBox, new Padding(5, 5, 5, 5));
もちろん、Multiline
を自動的にtrueに設定し、テキスト内の不要な改行を停止できる独自のTextBoxコントロールを作成するのが最善です。
この質問はすでに回答を推奨しています。とにかく私は別の答えを出したいと思います。 C#でテキストボックスにパディングを追加するには、「padLeft」メソッドを使用できます。これが誰かに役立つことを願っています。
textBox1.Text = "Hello";
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5);
or
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5, '*');
これは少し古いことを知っています。しかし、これが解決策です。最初のテキストについては、最初にスペースを追加します。次に、OnKeyPress
イベントをオーバーライドして、バックスペースできないように次のコードを追加できます。
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;
}
1は、埋め込むスペースの数に置き換えることができます。
上記の応答と、パディングされた値を介してバックスペースできるという認識された欠点を拡張します。テキストボックスのSelectionStartプロパティを使用して、TextChangedイベントが発生したときにカーソルを配置する場所を決定できます。
この例では、テキストボックスの先頭に2つのスペースが埋め込まれているため、表示される情報は、パディングプロパティが使用されている他の非入力コントロールと整列します。
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);
}