Windows Phone7でユーザーに文字を入力させたい場合にはTextBoxクラスを使用します。
TextBoxクラスはユーザーからの文字入力に対して様々な機能を提供するクラスです。
詳細は以下から。
本記事ではTextBoxの使用方法をサンプルを交えながら、以下のユースケースを想定して解説していきます。
- 入力されている文字列を取得する
- 複数行入力を可能にする
- ページ読み込み時にフォーカスを任意のTextBoxに当てる
- フォーカスが外れたタイミングで処理をする
入力されている文字列を取得する
入力されている文字列を取得するにはTextBox#Textを使用します。
以下のサンプルではボタンが押下されるとTextBoxの入力値を取得してTextBlockに表示されます。
(本記事中のxamlはアプリケーション作成時に自動で生成される部分を省略しています。)
xaml
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBox Height="73" HorizontalAlignment="Left" Margin="-4,71,0,0" Name="textBox1" Text="TextBox" VerticalAlignment="Top" Width="460" />
<Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="-4,150,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" />
<TextBlock Height="59" HorizontalAlignment="Left" Margin="12,6,0,0" Name="textBlock1" Text="TextBlock" VerticalAlignment="Top" Width="438" FontSize="40" />
</Grid>
ソースコード
public partial class MainPage : PhoneApplicationPage
{
// コンストラクター
public MainPage()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = textBox1.Text;
}
}
また、Textプロパティに対して文字列を代入するtとTextBox内に代入された文字が表示されるようになります。
複数行入力を可能にする
複数行入力はTextBox#AcceptsReturnプロパティを使用します。
このプロパティにtrueを設定すると改行が入力できるようになります。
複数の改行が入力されるとTextBoxの内容が読めなくなってしまいます。
そういう場合はTextBox#VerticalScrollBarVisibilityプロパティにAutoを設定します。
これで可視範囲を超えた入力があった場合にTextBoxの入力領域をスクロールすることができるようになります。。
縦の幅はスクロールによって見やすくなりますが、横幅の場合はスクロールできたとしてもみやすいものではありません。
そこで、Text#TextWrappingプロパティにWrapを設定することで、TextBoxの可視範囲内でテキストを折り返して表示させることができます。
以下のサンプルでは上記のプロパティを全て設定したTextBoxをxamlで記述しています。
xaml
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBox Height="100"
Width="460"
Name="textBox1"
Text="TextBox"
VerticalAlignment="Top"
AcceptsReturn="True"
VerticalScrollBarVisibility="Auto"
TextWrapping="Wrap" MaxHeight="100" MaxWidth="460" />
</Grid>
ページ読み込み時にフォーカスを任意のTextBoxに当てる
ページ読み込みを取得するためにはPhoneApplicationPage#Loadedイベントを使用します。
このイベント内で、任意のTextBoxのTextBox#Focusメソッドを呼び出します。
以下のサンプルではページが読み込まれた時に2段目のTextBoxにフォーカスが設定されます。
xaml
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBox Height="73" HorizontalAlignment="Left" Name="textBox1" Text="TextBox" VerticalAlignment="Top" Width="460" />
<TextBox Height="73" HorizontalAlignment="Left" Margin="0,65,0,0" Name="textBox2" Text="TextBox" VerticalAlignment="Top" Width="460" />
</Grid>
ソースコード
public partial class MainPage : PhoneApplicationPage
{
// コンストラクター
public MainPage()
{
InitializeComponent();
}
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
textBox2.Focus();
}
}
フォーカスが外れたタイミングで処理をする
文字の入力が終わり、フォーカスが外れた時に処理を行うにはTextBox#LostFocusイベントを使用します。
このタイミングの処理は入力値チェックなどによく使用されます。
以下のサンプルではフォーカスが外れたタイミングで、TextBox内の文字列に英文字以外の文字が入力されている場合にエラー文を表示するサンプルです。
xaml
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBox Height="73" HorizontalAlignment="Left" Name="textBox1" Text="" VerticalAlignment="Top" Width="460" LostFocus="textBox1_LostFocus" />
<TextBlock Height="56" HorizontalAlignment="Left" Margin="12,65,0,0" Name="textBlock1" Text="TextBlock" VerticalAlignment="Top" Width="438" FontSize="40" />
</Grid>
ソースコード
public partial class MainPage : PhoneApplicationPage
{
// コンストラクター
public MainPage()
{
InitializeComponent();
}
private void textBox1_LostFocus(object sender, RoutedEventArgs e)
{
if (!Regex.IsMatch(textBox1.Text, "^[a-zA-Z].+$"))
{
textBlock1.Text = "不正な文字列です";
}
}
}
14行目では文字列チェックに正規表現を使用しています。
C#出正規表現を使用するには、Regex#IsMatchメソッドを使用します。
このメソッドは第一引数にチェック対象の文字列を、第二引数に正規表現のパターンを指定すると、正規表現に一致している場合にtrueが返ってきます。
このメソッドを使用するためにはソースコードで“using”句を使用して”System.Text.RegularExpressions”を指定する必要があります。
using System.Text.RegularExpressions;
using句は特定のNameSpace(javaでいうところのパッケージ名みたいなもの)のクラスを名称を省略して記述する場合に使用します。
using句は以下の書式で記述します。
using [読み込むNameSpace名];
例として、プロジェクトを作成した時にソースコード先頭行付近に下記のような記述があると思います。
using System;
これらの他にも便利な使用方法がありそうなのですが、エミュレータの挙動が安定していない場合があるため、実機デバッグ環境が整ってから追記していきます。