TextBox

クラス階層

  • System.ComponentModel.Component
    • System.Windows.Forms.Control
      • System.Windows.Forms.TextBoxBase
        • System.Windows.Forms.TextBox
        • System.Windows.Forms.RichTextBox
        • System.Windows.Forms.MaskedTextBox

プロパティ

プロパティ 内容 既定
string Text コントロールのテキスト  
int TextLength コントロールのテキストの長さ  
bool AcceptsReturn Enterキーの動作を決める
  • true … 改行文字が入力される。ただしMultilineがfalseならば、何も入力されない
  • false … フォームの既定のボタンがアクティブになる。改行文字を入力するには、Ctrl + Enterを押下する
false
bool AcceptsTab Tabキーの動作を決める。
  • true … タブ文字が入力される。フォーカスを移動するには、Ctrl + Tabを押下する
  • false … 次のコントロールにフォーカスが移動する
false
bool Multiline trueならば、複数行 false
bool WordWrap trueならば、必要ならば行が折り返される true
ScrollBars ScrollBars 表示するスクロール バー

既定はScrollBars.Noneで水平も垂直スクロールバーも表示されず、テキストが表示領域を超えていても、それを視認できない。またWordWrapがtrueのときは、この設定にかかわらず水平スクロールバーは表示されない

 
int MaxLength ユーザーが入力または貼り付けられる文字列の最大数

Textプロパティからプログラムにより設定する方法には作用しない

 
string SelectedText 選択されているテキストを表す文字列。選択されていないならば、長さ0の文字列が返される  
int SelectionStart 選択されているテキストの開始位置。選択されていないならば、新しいテキストの挿入位置  
int SelectionLength 選択されているテキストの数  
bool HideSelection trueならば、フォーカスを失ったときに強調表示しない true
bool Modified trueならば、コントロールが作成または内容が設定されてから、ユーザーによって変更されている false
CharacterCasing CharacterCasing 入力された文字の大文字/小文字の変換方法  
AutoCompleteStringCollection AutoCompleteCustomSource AutoCompleteSourceプロパティがCustomSourceに設定されているときに使用される、文字列のコレクション  
       
プロパティ - TextBox クラス (System.Windows.Forms) | Microsoft Learn

Text

Textプロパティに設定するとアンドゥ バッファー (undo buffer) の情報が削除されてしまうため、それを望まないならばすべてのテキストを選択してPaste(String)で貼り付けます。

textBox.SelectAll();
textBox.Paste("SAMPLE");

SelectedText

TextBoxは最初にフォーカスされたとき、既定ですべてのテキストが選択された状態となります。これを無効にするにはTextプロパティの設定後に、SelectionStartプロパティに値を設定します。c# - Why is text in TextBox highlighted (selected) when form is displayed? - Stack Overflow

textBox.Text = "SAMPLE";
textBox.SelectionStart = 0;

Modified

初期状態はfalseで、ユーザーにより内容が変更されるとtrueとなります。そしてTextプロパティをプログラムにより変更すると、再びfalseとなります。

trueとなった後は、元と同じ内容に書き替えられても、コンテキストメニューの[元に戻す]で変更前の内容に戻されてもtrueのままのため、このプロパティだけで内容が異なる状態となったかは判定できません。

PlaceholderText

コントロールにテキストがないときに、透かし文字 (ウォーターマーク/watermark/キュー バナー/cue banner/テキスト キュー/textual cue) を表示できます。 TextBox.PlaceholderText プロパティ (System.Windows.Forms) | Microsoft Learn PlaceholderText - TextBox.cs

ただしこれを利用できるのは.NET Core 3.0以降のため、それより前ならば独自に実装する必要があります。

TextBoxに対してEM_SETCUEBANNER (0x1501) メッセージを送るのが簡単ですが、複数行ではサポートされません。また、視覚スタイルが有効でないと機能しません。さらにハンドルが作成されるたびに設定が破棄されるため、HandleCreatedイベントで再度設定する必要があります。 EM_SETCUEBANNER メッセージ (Commctrl.h) - Win32 apps | Microsoft Learn .net - Watermark TextBox in WinForms - Stack Overflow 透かし文字表示機能つきTextBox(WinForms) - hnx8のブログ

オートコンプリート (AutoComplete)

入力された文字列に、大文字/小文字の区別なく前方一致する文字列を提示できます。

複数行では機能しません。Remarks - TextBox.AutoCompleteSource Property (System.Windows.Forms) | Microsoft Learn

提示される文字列のフォントにはTextBoxのそれは適用されず、フォントを指定する方法も提供されていません。 WinForms | C# | AutoComplete in the Middle of a Textbox? - Stack Overflow change Textbox autocomplete dropdown Font

AutoCompleteMode

TextBox.AutoCompleteMode プロパティ (System.Windows.Forms) | Microsoft Learn
AutoCompleteMode列挙型
列挙子 数値  
None 0  
Suggest 1 ドロップダウン リストで提示する
Append 2 文字列を追加し、追加部分を選択状態にする
SuggestAppend 3 SuggestとAppendの両方
AutoCompleteMode 列挙型 (System.Windows.Forms) | Microsoft Learn

AutoCompleteSource

TextBox.AutoCompleteSource プロパティ (System.Windows.Forms) | Microsoft Learn
AutoCompleteSource 列挙型
列挙子 数値 意味
FileSystem 1  
HistoryList 2  
RecentlyUsedList 4  
     
CustomSource 64  
None 128  
ListItems 256 ComboBoxの項目
     
AutoCompleteSource 列挙型 (System.Windows.Forms) | Microsoft Learn

AutoCompleteSourceをCustomSourceとしたときには、AutoCompleteCustomSourceプロパティでそのリストを指定します。

textBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox.AutoCompleteSource = AutoCompleteSource.CustomSource;

textBox.AutoCompleteCustomSource.AddRange(new string[]
{
    "ABC",
    "DEF",
    "GHI",
});

提示される文字列は、追加順とは無関係に並べ替えられて表示されます。重複した文字列を追加できますが、表示はされません。

Padding

Paddingプロパティは機能しません。TextBoxBase.Padding プロパティ (System.Windows.Forms) | Microsoft Learn

よってその必要があるならば、EM_SETRECT (0x00B3) メッセージで指定します。ただしこのメッセージは、複数行のときしか機能しません。 EM_SETRECT メッセージ (Winuser.h) - Win32 apps | Microsoft Learn c# - Rich Text Box padding between text and border - Stack Overflow

メソッド

メソッド 機能
Focus() コントロールに入力フォーカスを設定する
Select() コントロールをアクティブにする
Select(Int32, Int32) 指定範囲のテキストを選択する
SelectAll() すべてのテキストを選択する
ScrollToCaret() キャレットが表示される位置までスクロールできる
GetCharFromPosition(Point) 指定位置に最も近い文字を得られる
GetCharIndexFromPosition(Point) 指定位置に最も近い文字のインデックスを得られる
Cut() 選択されているテキストを、クリップボードへ移動できる
Copy() 選択されているテキストを、クリップボードへコピーできる
Paste() 選択されているテキストを、クリップボードと置換できる
Paste(String) 選択されているテキストを、クリップボードと置換できる。アンドゥ バッファーを消去しない
Undo() 最後の編集操作を、元に戻せる
   
メソッド - TextBox クラス (System.Windows.Forms) | Microsoft Learn

AppendText()

Textプロパティにテキストを追加できます。

public void AppendText(string text)
TextBoxBase.AppendText(String) メソッド (System.Windows.Forms) | Microsoft Learn

Select(Int32, Int32)

指定範囲のテキストを選択、または指定位置へキャレットを移動できます。

public void Select (int start, int length);
TextBoxBase.Select(Int32, Int32) メソッド (System.Windows.Forms) | Microsoft Learn

文字を選択せずにキャレットを移動するだけならば、lengthをゼロとします。

引数を省略すると基本クラスのControl.Select()が呼ばれ、コントロールがアクティブになります。

コントロールがアクティブではないと選択範囲の背景色が変化しないため、選択されていることを視認できません。

ScrollToCaret()

表示位置を制御できます。

スクロールバーはWin32のSetScrollInfo()で移動できますが、これを呼ぶだけでは内容はスクロールしません。[C#] ウィンドウコントロールのスクロールバー情報の取得と設定

GetCharIndexFromPosition(Point)

指定位置がコントロールのクライアント領域を外れている、または最後の文字を超えているときは、最後の文字のインデックスが返されます。

Point position = textBox.PointToClient(Control.MousePosition);
int index = textBox.GetCharIndexFromPosition(position);

Clear()

すべてのテキストを削除できます。これは内部的にはText = null;とするのと同じです。Clear - TextBoxBase.cs

そのときアンドゥ バッファー (undo buffer) の情報も削除されてしまうため、それを望まないならばすべてのテキストを選択して空文字列を貼り付けます。

textBox.SelectAll();
textBox.Paste("");

Undo()

CanUndoプロパティがtrueを返す状態ならば操作を元に戻せますが、falseならば何も起こりません。Remarks - TextBoxBase.Undo Method (System.Windows.Forms) | Microsoft Learn

このメソッドはEM_UNDOメッセージを送ることと同じですが、このメッセージの戻り値を返さないため、処理の成否を確認できません。 Undo - TextBoxBase.cs EM_UNDO メッセージ (Winuser.h) - Win32 apps | Microsoft Learn

イベント

イベント 発生タイミング
TextChanged Textプロパティの値が変更されるとき。プログラム、ユーザーいずれによる変更でも発生する
   
イベント - TextBox クラス (System.Windows.Forms) | Microsoft Learn

KeyDown

AutoCompleteModeをNone以外に、そしてAutoCompleteSourceを設定すると、Ctrl + Tabなどに対しKeyDownイベントが発生しなくなります。

ショートカットキー

いくつかのキーはメモ帳 (Windows Notepad) と同じであり、Ctrl+JCtrl+Mで改行文字、Ctrl+Iでタブ文字が挿入されます。ただしCtrl+Hはそれとは異なり、Backspaceの入力となります。

既定のショートカットを無効にするにはKeyDownのハンドラで、それらのキーに対してSuppressKeyPressをtrueとします。C# textbox disable shortcuts - Stack Overflow

Microsoft Learnから検索