型 | プロパティ | 内容 | 既定 |
---|---|---|---|
string | Text | コントロールのテキスト | |
int | TextLength | コントロールのテキストの長さ | |
bool | AcceptsReturn | Enterキーの動作を決める
|
false |
bool | AcceptsTab | Tabキーの動作を決める。
|
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に設定されているときに使用される、文字列のコレクション | |
Textプロパティに設定するとアンドゥ バッファー (undo buffer) の情報が削除されてしまうため、それを望まないならばすべてのテキストを選択してPaste(String)で貼り付けます。
textBox.SelectAll(); textBox.Paste("SAMPLE");
TextBoxは最初にフォーカスされたとき、既定ですべてのテキストが選択された状態となります。これを無効にするにはTextプロパティの設定後に、SelectionStartプロパティに値を設定します。c# - Why is text in TextBox highlighted (selected) when form is displayed? - Stack Overflow
textBox.Text = "SAMPLE"; textBox.SelectionStart = 0;
初期状態はfalseで、ユーザーにより内容が変更されるとtrueとなります。そしてTextプロパティをプログラムにより変更すると、再びfalseとなります。
trueとなった後は、元と同じ内容に書き替えられても、コンテキストメニューの[元に戻す]で変更前の内容に戻されてもtrueのままのため、このプロパティだけで内容が異なる状態となったかは判定できません。
コントロールにテキストがないときに、透かし文字 (ウォーターマーク/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のブログ
入力された文字列に、大文字/小文字の区別なく前方一致する文字列を提示できます。
複数行では機能しません。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
列挙子 | 数値 | |
---|---|---|
None | 0 | |
Suggest | 1 | ドロップダウン リストで提示する |
Append | 2 | 文字列を追加し、追加部分を選択状態にする |
SuggestAppend | 3 | SuggestとAppendの両方 |
列挙子 | 数値 | 意味 |
---|---|---|
FileSystem | 1 | |
HistoryList | 2 | |
RecentlyUsedList | 4 | |
CustomSource | 64 | |
None | 128 | |
ListItems | 256 | ComboBoxの項目 |
AutoCompleteSourceをCustomSourceとしたときには、AutoCompleteCustomSourceプロパティでそのリストを指定します。
textBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend; textBox.AutoCompleteSource = AutoCompleteSource.CustomSource; textBox.AutoCompleteCustomSource.AddRange(new string[] { "ABC", "DEF", "GHI", });
提示される文字列は、追加順とは無関係に並べ替えられて表示されます。重複した文字列を追加できますが、表示はされません。
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() | 最後の編集操作を、元に戻せる |
Textプロパティにテキストを追加できます。
public void AppendText(string text)TextBoxBase.AppendText(String) メソッド (System.Windows.Forms) | Microsoft Learn
指定範囲のテキストを選択、または指定位置へキャレットを移動できます。
public void Select (int start, int length);TextBoxBase.Select(Int32, Int32) メソッド (System.Windows.Forms) | Microsoft Learn
文字を選択せずにキャレットを移動するだけならば、lengthをゼロとします。
引数を省略すると基本クラスのControl.Select()が呼ばれ、コントロールがアクティブになります。
コントロールがアクティブではないと選択範囲の背景色が変化しないため、選択されていることを視認できません。
表示位置を制御できます。
スクロールバーはWin32のSetScrollInfo()で移動できますが、これを呼ぶだけでは内容はスクロールしません。[C#] ウィンドウコントロールのスクロールバー情報の取得と設定
指定位置がコントロールのクライアント領域を外れている、または最後の文字を超えているときは、最後の文字のインデックスが返されます。
Point position = textBox.PointToClient(Control.MousePosition); int index = textBox.GetCharIndexFromPosition(position);
すべてのテキストを削除できます。これは内部的にはText = null;
とするのと同じです。Clear - TextBoxBase.cs
そのときアンドゥ バッファー (undo buffer) の情報も削除されてしまうため、それを望まないならばすべてのテキストを選択して空文字列を貼り付けます。
textBox.SelectAll(); textBox.Paste("");
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プロパティの値が変更されるとき。プログラム、ユーザーいずれによる変更でも発生する |
AutoCompleteModeをNone以外に、そしてAutoCompleteSourceを設定すると、Ctrl + Tabなどに対しKeyDownイベントが発生しなくなります。
いくつかのキーはメモ帳 (Windows Notepad) と同じであり、Ctrl+JとCtrl+Mで改行文字、Ctrl+Iでタブ文字が挿入されます。ただしCtrl+Hはそれとは異なり、Backspaceの入力となります。
既定のショートカットを無効にするにはKeyDownのハンドラで、それらのキーに対してSuppressKeyPressをtrueとします。C# textbox disable shortcuts - Stack Overflow