« 2007年11月 | トップページ | 2008年1月 »

[P12]WPFアプリケーション:マウスでテキストボックスをクリックした場合のイベントハンドラーは?

Mouse で TextBox を Click(MouseDown) した場合、どの EventHandler でそのイベントをとらえたらいいのか。

 MSDNフォーラムに質問を出したところ、FC-Shiro さんという方が
解決して下さいました。

http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2593002&SiteID=7


一応、結論だけ書いておきます。

TextBox では、MouseDown イベントが使えない。
以下の方法で代用するそうです。

         [注]  MouseDownHandler の部分は、自由に命名できる。

《XAML》

  <TextBox  PreviewMouseDown="MouseDownHandler"/>

《C#》

  TextBox textBox = new TextBox();
  textBox.PreviewMouseDown += MouseDownHandler;

《イベントハンドラー》

   void MouseDownHandler(Object sender, RoutedEventArgs e)
   {
       //
   }

この点に関するマイクロソフトのドキュメント

     http://msdn2.microsoft.com/ja-jp/library/ms750580(vs.80).aspx

  [以上]

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
目次に戻る ・・・・ 左欄のカテゴリー 【パソコンの窓】 をクリック
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

| | コメント (0)

[P11]WPFアプリケーション:フォーカスの設定(取得)と移動

① フォーカスの設定(取得)

  textbox1.Focus();

    まず、以下を読む。
     http://msdn2.microsoft.com/ja-jp/library/ms754010.aspx

  Focus メソッド:
http://msdn2.microsoft.com/ja-jp/library/system.windows.uielement.focus.aspx   


② フォーカスの移動

            TraversalRequest request
                   = new TraversalRequest(FocusNavigationDirection.Down);
            
            UIElement elementWithFocus = (UIElement)Keyboard.FocusedElement;
            
            if (elementWithFocus != null)   {
                elementWithFocus.MoveFocus(request);
            }

  まず、以下を読む。
      http://msdn2.microsoft.com/ja-jp/library/aa969768.aspx

  MoveFocus メソッド:
    http://msdn2.microsoft.com/ja-jp/library/system.windows.uielement.movefocus.aspx

   TraversalRequest クラス
http://msdn2.microsoft.com/ja-jp/library/system.windows.input.traversalrequest(VS.80).aspx

   FocusNavigationDirection 列挙体
http://msdn2.microsoft.com/ja-jp/library/system.windows.input.focusnavigationdirection(VS.80).aspx


xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
目次に戻る ・・・・ 左欄のカテゴリー 【パソコンの窓】 をクリック
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

| | コメント (0)

[P10] WPF 体制下における Application.DoEvents() メソッドの代替手段

WPF(Windows Presentation Foundation) アプリケーションでは、GDI 体制下の

System.Windows.Forms.Application クラスの DoEvents() メソッド
         [メッセージ キューに現在ある Windows メッセージをすべて処理する]

がなくなってしまいました。

その代替手段として、名前空間: System.Windows.Threading の、
Dispatcher.PushFrame メソッドを以下のようにして使うのだそうです。

C#

public void DoEvents()
{
    DispatcherFrame frame = new DispatcherFrame();
    Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,
        new DispatcherOperationCallback(ExitFrames), frame);
    Dispatcher.PushFrame(frame);
}

public object ExitFrames(object f)
{
    ((DispatcherFrame)f).Continue = false;
   
    return null;
}

下のMSDN クラスライブラリのページにそのまま載っております。

http://msdn2.microsoft.com/ja-jp/library/system.windows.threading.dispatcher.pushframe(VS.80).aspx

なお、上記の引用コードでは修正済みですが、MSDN クラスライブラリのページにあるものは、new DispatcherOperationCallback(ExitFrames), frame); であるべきところ、記載ミスで (ExitFrame) => 最後の[s]が抜けていますので注意してください。

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
目次に戻る ・・・・ 左欄のカテゴリー 【パソコンの窓】 をクリック
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

| | コメント (0)

[P8]WPF 体制下において、ImeMode を切り替える方法

Windows の描画機構が、GDI から WPF(Windows Presentation Foundation)に変わったのに伴い、IME モードの切り替え方(半角・全角の切り替え方)が変わりました。
GDI 下では、TextBox などの入力コントロールのプロパティ ImeMode で切り替えましたが、 WPF 下ではコントロールから独立した一個のクラス( InputMethod クラス )になっております。

[C#]
using System.Windows.Input;

InputMethod.Current.ImeState = InputMethodState.On;
InputMethod.Current.ImeState = InputMethodState.Off;

これだけで、切り替わります。いづれ、当たり前のことになるのでしょうが、移行時には戸惑います。

なお、特に入力時の瞬間での切り替えを厳密にしたければ、

   private void textBox1_GotFocus(object sender, RoutedEventArgs e)
   {
   }

などの当該コントロールの何らかのイベントハンドラー内に、上記コードを書けばよいでしょうが、そういう手間をかける必要がない場合もあると思います。

便宜のため、以下に整理しておきます。

[ InputMethod クラス ]

名前空間: System.Windows.Input
アセンブリ: PresentationCore (presentationcore.dll 内)

MSDN ライブラリ内の該当URL
http://msdn2.microsoft.com/ja-jp/library/system.windows.input.inputmethod.aspx

[ InputMethodState 列挙体 ]

メンバ   { DoNotCare, Off, On }

名前空間・アセンブリ ・・・・同上

MSDN ライブラリ内の該当URL
http://msdn2.microsoft.com/ja-jp/library/system.windows.input.inputmethodstate.aspx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
目次に戻る ・・・・ 左欄のカテゴリー 【パソコンの窓】 をクリック
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

| | コメント (0)

« 2007年11月 | トップページ | 2008年1月 »