スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

TextBoxフォーカス時における挙動を変えたいと思った。(参)

 TextBoxフォーカス時における挙動を変えたいと思った。(壱)で作った添付プロパティを実際の画面で使う事になった。
 業務で使うような画面では、数値や文字列を修正する時(特に数値系)、一々バックスペースやデリートキーを押したくない。というか、元の文字列を消し忘れる事で、明らかに入力ミスの割合が高くなる。なので、フォーカスがあたった時は、テキスト全選択状態にしてほしい、という要望があったからだ。早速使う事にしたんだけど、同じプロジェクトの後輩から指摘を受けた。

後輩:マウスでフォーカス当てた時に動かないっすよ。
自分:えー(↑)。現行の画面はどうなの?
後輩:ちゃんと動くっすよ。ほら。
自分:ほんとだOrz。


よくよく考えたら、画面を使うユーザーは、マウス操作がメインだった。以前に関わったプロジェクトの対象ユーザーはキーボード操作メインだったので、勘違いしてた。ちなみに、キーボードメインのユーザーは、一日にすごい量の伝票入力をこなしている。マウスなんて触ってる時間が惜しいといわんばかりの操作っぷりらしい。
で、探した所、いいのがあった。
How to SelectAll in TextBox when TextBox gets focus by mouse click?
おお。そのままだ。
public static class TextBoxBehavior {

/// <summary>
/// BehavoirOnGotFocusProperty変更イベントハンドラ
/// </summary>
/// <param name="dpObj">イベント発生元</param>
/// <param name="e">イベントデータ</param>
private static void OnBehavoirOnGotFocusPropertyChanged(
DependencyObject dpObj, DependencyPropertyChangedEventArgs e) {
var txtBox = dpObj as TextBox;

if (txtBox == null) {
//TextBox系以外は受け付けません。
return;
}

txtBox.PreviewMouseLeftButtonDown -=
new MouseButtonEventHandler(TxtBox_PreviewMouseLeftButtonDown);

if (e.NewValue != null && ((BehaviorOnFocus)e.NewValue) != BehaviorOnFocus.None) {
txtBox.PreviewMouseLeftButtonDown +=
new MouseButtonEventHandler(TxtBox_PreviewMouseLeftButtonDown);
}

return;
}

/// <summary>
/// マウス左ボタン 押下前イベント用メソッド
/// </summary>
/// <param name="sender">イベントソース</param>
/// <param name="e">イベントデータ</param>
private static void TxtBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
var textBox = sender as TextBox;

System.Diagnostics.Debug.Assert(textBox != null);
var behavior = TextBoxBehavior.GetBehavoirOnGotFocus(textBox);

if (behavior != BehaviorOnGotFocus.None &&
!textBox.IsKeyboardFocusWithin) {
e.Handled = true;
textBox.Focus();
return;
}

return;
}
}
これでマウスによるフォーカスでも期待通りに動く、はず。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。