none
.NETのイベント種類について RRS feed

  • 質問

  • こんにちは。

    .NETのイベントの種類を教えていただきたいと思います。

    MSDNで出ているとは思うのですが、検索しきれません。

     

    .NETのデザインから、テキストボックスをクリックすると、

    Text_Changedイベントが作成されますが、このText_Changedはテキストに入力があれば

    その1文字1文字でイベントが発生してしまいます。

    僕がほしいのは、1文字1文字ではなくて、最後にEnterされて文字列として確定して、イベントが発生するような。。。

    それか、フォーカス状態からフォーカスが移ったときにイベントが発生するとか。。。

     

    そういうイベントがほしいのですが、そういうイベントって存在しないのでしょうか?

    コーディングを補助するプルダウンのメニューのなかにも、そういうコントロールイベントは存在しないような気がします。

     

    ・・・昔、、.NET/VBにはあった気がします。。。

     

    あれば、場所を教えていただきたいと思います。

    なければ、どのように書けば、そういう挙動にできるとか参考を教えていただきたいと思います。

    よろしくお願いします。

     

    2007年4月12日 0:34

すべての返信

  •  大迫 さんからの引用
    .NETのデザインから、テキストボックスをクリックすると、Text_Changedイベントが作成されますが、このText_Changedはテキストに入力があればその1文字1文字でイベントが発生してしまいます。僕がほしいのは、1文字1文字ではなくて、最後にEnterされて文字列として確定して、イベントが発生するような。。。

    "Enter" ですか... それだと IME などから変換が "確定" した時しか考えられませんが、
    その場合は、その時だけ TextChanged イベントが発生しますので、何ら問題ないはずです。

    それか、フォーカス状態からフォーカスが移ったときにイベントが発生するとか。。。
    そういうイベントがほしいのですが、そういうイベントって存在しないのでしょうか?

    入力検証をしたいと受け止めましたので、Validating イベントをお勧めします。

    ご自身が書かれているとおり、このあたりは MSDN ライブラリにもしっかりと書いてあります。
    ひとつひとつ見るのはつらいでしょうけど、最初だけだと思いますし、
    英単語の意味を知っている程度の英語能力でも、名前からイベントの発生タイミングを知るのは容易です。
    (というより、NCL は容易になるような命名になっているハズです)

    ・・・昔、、.NET/VBにはあった気がします。。。

    それは、何のイベントのことでしょうか?
    消えたイベントなど皆無といっても過言ではないと思いますが...
    2007年4月12日 0:48
  • テキストボックスで1行で完結するやつならできますよ

     

    TextBox1->Multiline = false;

    これでテキストボックスを1行で完結させ、

     

    this->AcceptButton = button1;
     これでユーザーが Enter キーを押したときにクリックされる、フォーム上のボタンを取得または設定します。

    2007年4月14日 8:04
  •  じゃんぬねっと さんからの引用
     大迫 さんからの引用
    Text_Changedはテキストに入力があればその1文字1文字でイベントが発生してしまいます。僕がほしいのは、1文字1文字ではなくて、最後にEnterされて文字列として確定して、イベントが発生するような。。。


    "Enter" ですか... それだと IME などから変換が "確定" した時しか考えられませんが、
    その場合は、その時だけ TextChanged イベントが発生しますので、何ら問題ないはずです。


    大迫さんの環境はなんでしょう?

     

    TSF (Text Services Framework) 環境だと、 IME での変換中にもバンバン TextChanged イベントが飛んできます。 Vista + WPF では、 IME が文字列を確定した、 というイベントが取れなくて四苦八苦しました ( …というか、 まだ解決できてないというか f(^^; ) ( → MSDN フォーラム ≫ .NET Framework ≫ Windows Presentation Foundation ( WPF ) ≫ TextBoxで入力にフィルターをしたい。 )
    2007年4月16日 6:42
  • 元々の質問は IME 絡みではなさそうなので,以下は読み流してください.

     

     biac さんからの引用

    TSF (Text Services Framework) 環境だと、 IME での変換中にもバンバン TextChanged イベントが飛んできます。 Vista + WPF では、 IME が文字列を確定した、 というイベントが取れなくて四苦八苦しました ( …というか、 まだ解決できてないというか f(^^; ) ( → MSDN フォーラム ≫ .NET Framework ≫ Windows Presentation Foundation ( WPF ) ≫ TextBoxで入力にフィルターをしたい。 )

     

    これはいわゆる「On the spot 入力」か「Over the spot 入力」かの違いという奴ではないですかね.TSF に限らず IMM32 でも入力方式の違いというくくりで理解できるかと思います.

    「On the spot 入力」では,プリエディット (コンポジション文字列)の段階からウィジットにとりこまれ,ウィジット経由で外部に公開されるのが一般的です.たとえば Google Suggest が IME による変換中の文字列に対しても補完できているのは,モダンなブラウザのテキストエリアが「On the spot 入力」に対応しているからと言えるでしょう.

    一方,IME Unaware Application や,TSF Unaware Application は,入力確定後にまとめて文字列が送られてくるように見えますが,これは入力途中の状態管理についてアプリケーションが対応していないためです.今回の質問は IME とは関係なさそうですが,「最後に Enter されて文字列として確定する」ときに,改めて文字列挿入が発生するのが「Over the spot 入力」で,既に挿入されている文字列の属性を変えるだけなのが「On the spot 入力」という感じです.

     

    なお,WPF アプリケーションから Vista 版 TSF の生イベントが必要なら,うちの日記である程度やり方を書いています.ご参考までに.

    TSF を使う (3) - WPF での UILess Mode

    2007年4月16日 7:25