基本的な使い方 |
このトピックでは、テキストコントロールの基本的な使い方について解説します。
テキストコントロールは、書式を設定することで入力可能な文字種を制限することができます。テキストコントロールに設定可能な文字種等の詳細については、「書式を設定する」で解説しますので、ここではデザイン画面上からテキストコントロールに書式を設定する方法について説明します。
以下は、入力可能な文字種を全角のアルファベットに限定する例です。なお、文字種の全角および半角は、その文字の Shift-JIS コードを使って識別されます。
同じ書式をコードで設定する場合は次のようになります。
MaxLengthUnit プロパティを使えば、MaxLength プロパティでコントロールへの入力可能文字数を設定する際に文字のカウント方法を指定することができます。MaxLengthUnit プロパティには、次の3つの設定値があります。バイト単位の処理では、各文字のバイト数は Shift-JIS コードを使って識別されます。
MaxLengthUnit の値 | 説明 |
---|---|
Char | 文字列の長さを計算するときの計算単位が .NET 文字であることを示します。 |
Byte | 文字列の長さを計算するときの計算単位がバイト文字であることを示します。 |
TextElement | 文字列の長さを計算するときの計算単位がテキスト要素であることを示します。 |
なお、SelectionStart プロパティと SelectionLength プロパティは、MaxLengthUnit プロパティの設定にかかわらず LengthUnit.Char でカウントした結果と同じ文字単位で処理されます。
WatermarkNull プロパティおよび WatermarkDisplayNull プロパティを使用すれば、コントロールが未入力のときに代わりに透かし表示するテキストを文字列として設定することができます。
コントロールにフォーカスがあるときの透かし表示テキストを設定するには WatermarkNull プロパティを、コントロールにフォーカスがないときのテキストを設定するには WatermarkDisplayNull プロパティを使用します。
なお、WatermarkNullForeground プロパティおよび WatermarkDisplayNullForeground プロパティを使用することにより、それぞれのテキストを表示する際の前景色を指定することができます。
EditMode プロパティを使って、コントロールがフォーカスを受け取ったときのデフォルトの編集モードを定義できます。EditMode プロパティを EditMode.Insert にすると挿入モード、EditMode.Overwrite にすると上書きモードになります。また、EditMode.FixedInsert と EditMode.FixedOverwrite では、編集モードが固定されるので、実行中に[Ins]キーが押されても編集モードは切り替わりません。
EditMode プロパティが EditMode.Insert または EditMode.Overwrite に設定されているときに[Ins]キーを押したり、EditMode プロパティの値を変更したりすることで、編集モードが切り替わった場合には、EditStatusChanged イベントが発生します。また、フォーカス取得時の編集モードは、IsOverwrite プロパティを使って調べることができます。
以下のサンプルコードは、IsOverwrite プロパティを使用して編集モードを常に監視します。
private void GcTextBox_EditStatusChanged(object sender, RoutedEventArgs e) { // 編集モードが切り替えられた場合に呼び出されます CheckEditMode(); } private void GcTextBox_GotFocus(object sender, RoutedEventArgs e) { CheckEditMode(); } private void CheckEditMode() { // 編集モードをチェックします if (GcTextBox1.IsOverwrite == true) TextBlock1.Text = "上書き"; else TextBlock1.Text = "挿入"; }
ShowRecommendedValue プロパティを使用すると、テキストコントロールで値が未入力のとき、入力候補となる値をグレー表示することができます。入力候補として表示されたテキストの値は、表示された候補値のまま適用するか、全ての値を変更して入力値として適用することができます。入力候補として表示される値は、RecommendedValue プロパティで設定します。
候補値を表示可能な他のコントロールでは、ショートカットコマンドとして、デフォルトで [Ctrl]+[Enter] キーに対して候補値を確定する動作が定義されます。 これにより他のコントロールでは [Ctrl]+[Enter] キーを押下することで値を確定できますが、テキストコントロールについてはデフォルトでショートカットコマンドが定義されないため、[Ctrl]+[Enter] キーを押下しても値を確定できません。
キーを押下して値を確定するためには、コントロールに対して手動でショートカットコマンドを追加し、任意のキーが押された際に ApplyRecommendedValueCommand コマンドを実行するようにします。 ショートカットコマンドは、他のコントロールと同様に [Ctrl]+[Enter] キーに対して設定することも可能です。
以下のサンプルコードは、「入力候補値」という値の入力候補値を設定し、[Ctrl]+[Enter] キーが押されたときに値を確定します。
using GrapeCity.Windows.InputMan; GcTextBox1.RecommendedValue = "入力候補値"; GcTextBox1.ShowRecommendedValue = true; // [Ctrl]+[Enter] が押されたときに値を確定します。 KeyBinding binding = new KeyBinding(GcTextBox.ApplyRecommendedValueCommand, Key.Enter, ModifierKeys.Control); GcTextBox1.InputBindings.Add(binding);
HighlightText プロパティを使用すると、フォーカスを受け取ったときに、コントロールのすべてのテキストを選択状態にできます。コントロールからフォーカスが移動した後もコントロールのハイライト表示を保持するには、HideSelection プロパティを使用します。
コントロールの一部分のみ選択状態にするには、SelectionStart プロパティと SelectionLength プロパティを組み合わせて使用します。
以下のサンプルコードは、コントロールがフォーカスを受け取った時にコントロール内の最初の文字列から3文字を選択します。
private void GcTextBox1_GotFocus(object sender, RoutedEventArgs e) { GcTextBox1.SelectionStart = 0; GcTextBox1.SelectionLength = 3; }
注意 |
---|
GotFocus イベント内にて SelectionStart と SelectionLength の各プロパティを使って選択範囲を指定した場合は、これらのプロパティの設定が HighlightText プロパティの設定よりも優先されます。 |
コントロールに文字列を入力すると、TextChanged イベントの前(入力された文字列が Text プロパティに渡される前)に TextChanging イベントが発生します。このイベント内で入力文字列をチェックすることにより、Text プロパティの値に影響を与えることなく、入力を制御できます。
ShowOverflowTip プロパティを使用して、Text プロパティに割り当てられた文字列がコントロールの幅に収まりきらないときに、オーバーフローチップにすべての文字列を表示するかどうかを設定します。ShowOverflowTip プロパティを True に設定すると、コントロールの上にマウスカーソルが置かれたときにオーバーフローチップを表示します。False に設定するとオーバーフローチップは表示されません。
Text プロパティに割り当てられた文字列がコントロールの幅に収まりきらないときに、すべての文字が表示されていないことを示す省略文字を表示することができます。省略文字の表示の有無やその表示位置は、Ellipsis プロパティで設定することができます。
Ellipsis プロパティの値 | 表示例 | 説明 |
---|---|---|
EllipsisMode.None | 省略文字を表示しません。 | |
EllipsisMode.EllipsisEnd | コントロールの右側に省略文字を表示します。 | |
EllipsisMode.EllipsisPath | コントロールの中央に省略文字を表示します。 |
省略文字は、既定値では3点リーダー(…)で表示されます。任意の文字に表示を変更する場合は、EllipsisString プロパティを使用します。
AcceptsCrLf プロパティを使用してクリップボードへ改行を含む文字列をコピー、または貼り付けた場合の改行コードの扱いを設定できます。
AcceptsCrLf プロパティの値 | 説明 |
---|---|
CrLfMode.Filter | 全ての改行コードを削除しコピー、貼り付けを行います。 |
CrLfMode.Cut | 最初の改行コード以降の文字列を削除します。標準コントロールと同じ動作です。 |