質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

15076閲覧

[C#]フォーカスがついているコントローラーを取得したい

bbdd

総合スコア43

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2018/05/09 11:54

編集2018/05/09 11:55

前提

・C#
・Visual Studio 2017
・WPFアプリ

やりたいこと

UIとして「テキストボックス」と「ボタン」があります。

テキストボックスのフォーカス状態を「LostFocus」ハンドラーで監視しており、
フォーカスが外れた際に、フォーカスの移り先を取得したいです。

イメージとしては下記のようなコードを書きたいです。

private void TextBox_LostFocus(object sender, RoutedEventArgs e) { if ({あるボタンにフォーカスが移ったとき}) { Console.WriteLine("ボタンにフォーカスが移りました。"); } else { Console.WriteLine("ボタン以外にフォーカスが移りました。"); } }

TextBox_LostFocusにてテキストボックスからフォーカスが外れたイベント取得できているのですが、フォーカスが移ったコントローラーの取得方法が分からないです。

アドバイス等頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

英語ですがありました。
FocusManager クラスを使えばよさそうです。

Get currently focused element/control in a WPF window

投稿2018/05/09 12:32

gaya-K

総合スコア449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2018/05/09 12:53 編集

質問と回答を再検討していて、同じサイト(Stackoverflow)の内容を読んでました。こちらの案の方が良いと思います。回答に追記しようとしましたが、それはやめて、こちらへのフォローとさせていただきます。以下はLostFocusハンドラ内で現在、フォーカスを持っている要素を判定している例です。(検証用にコードを書いてしまったので放出) private void TextBox_LostFocus(object sender, RoutedEventArgs e) { Debug.WriteLine("TextBox_LostFocus"); IInputElement element = FocusManager.GetFocusedElement(this); Debug.WriteLine("Type: " + element.GetType().ToString()); if (element.GetType() == typeof(Button)) { // Button var button = (Button)element; Debug.WriteLine("Button.Name: " + button.Name); } }
gaya-K

2018/05/09 12:57 編集

if (element.GetType() == typeof(Button)) var button = (Button)element; の部分ですが、 if(element is Button button) か var button = element as Button; if(button!=null) の方がスマートですよ。前者は新しい構文なので、環境によってはコンパイルできないかもしれません。
dodox86

2018/05/09 12:55

なるほど、愚直に昔の書き方をしていました。ご指摘どうもありがとうございます。
guest

0

LostFocusイベントに対応する、GotFocusイベントがあります。
Visual Studioで、TextBoxのプロパティウィンドウからもGotFocusイベントハンドラを登録できます。

UIElement.GotFocus イベント

その他、参考情報として。フォーカスの概要
※機械翻訳なのでとても読みにくいです。オリジナルの英語サイトの情報の方が良いかも。

投稿2018/05/09 12:09

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2018/05/09 12:11

> ※機械翻訳なのでとても読みにくいです。 まだ、マシな方ではないでしょうか? 最近、困っています。
dodox86

2018/05/09 12:45

gaya-Kさんの回答案の方が良いかと思いました。(私の案は質問内の要望を満たしてません)
pepperleaf

2018/05/09 13:03

日本語にして欲しい、、、英語だとどうしてもワンアクション。
dodox86

2018/05/09 13:11

良質な日本語訳を待っていると遅くなってしまうのは、もう仕方が無いかと。(IT系翻訳者さんからローカライズ事情をかなり昔から聞いてますが、人間での供給は限界のようです)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問