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

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

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

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

Q&A

解決済

2回答

3819閲覧

C# Focusの対象コントロールを動的に作成したい。

OY_hironet

総合スコア16

C#

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

0グッド

0クリップ

投稿2017/02/04 07:24

お世話になります。

C#において、やりたいこと
XXX,Focus();
のXXXを変数等に設定した値に変更したい。

変更する名称を
string aa = this.ActiveControl.Name;
の形で当該コントロールの名称を持ってきて、

次に、aa.Focus();
としたところ、
「stringにFocusの定義が含まれない」
となり、できませんでした。

コントロールなのかなと思い、
Control aa = new Control();
aa.Name = this.ActiveControl.Name;

で、aa..NameFocus();などと、わけのわからないことを試してみましたが、
やはり解決できませんでした。

なんとなく、インテリセンスが働かないので、
Focusの前は、コントロールでないといけないのかなと思うのですが、解決策が見出せません。

ネットで検索しても、力不足で見つけられませんでした。
そもそも上記のような方法は可能なのでしょうか。

できるとすればどのような方法がありますでしょうか。
ご教授頂けますと幸いです。

いつもすみません。

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

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

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

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

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

guest

回答2

0

やりたいことは「Formの下にある特定のコントロールへフォーカスを移動する」ことだと思います。

this.ActiveControl

というコードを書かれています。これは多分Form内のメソッドに書かれていると思います。この結果は「当該Formにあるフォーカスを持っているコントロール」となります。ですので

c#

1Control activeControl = ActiveControl; 2if (activeControl != null) { 3 activeControl.Focus(); 4}

と書けますがこう書いても何も有用なことはできません。「すでにフォーカスがあるコントロールにフォーカスを移動する」としても意味はないですよね?

ですのでやりたいことを「このフォームの下にある"text1"という名前のTextBoxへフォーカスを移動する」と仮定すると、

text1.Focus();

でできます。「"text1"という名前のTextBox」と書きましたがそれを少し補足しますとフォームデザイナーでTextBoxを配置しそのNameプロパティーへ"text1"と指定してあるということを意味します。
こうしておくとフォームクラス(普通に作成するとForm1などになります)内のフィールド名text1が自動的に定義されフォームを開くときにそのフィールドにTextBoxが設定される仕組みになっています。

XXXを変数等に設定した値に変更したい。

変数的なものとしてローカル変数、フィールドなどがありますが上ではデザイナーが自動的に定義してくれるフィールドを例にしました。

投稿2017/02/04 07:48

KSwordOfHaste

総合スコア18394

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

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

OY_hironet

2017/02/04 14:33

前略、丁寧な解説ありがとうございました。 なんとなく参考になりました。 見よう見まねで基礎力もなく行なっているので大変参考になりました。 今回は、別解を参考にさせてもらいましたが、今後ともよろしくお願いいたします。
guest

0

ベストアンサー

Activeだったコントロールに後ほどフォーカスをあてたいのなら、

Control aa =  this.ActiveControl; // 何かする aa.Focus();

で、いかがでしょうか。
それとも、記憶するのは名前だけでなければならない何らかの理由があるのでしょうか?

投稿2017/02/04 07:38

編集2017/02/04 07:41
alg

総合スコア2019

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

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

OY_hironet

2017/02/04 14:22

前略、ありがとうございました。 ご指示いただいた方法で、無事動作が確認できました。 まずは、御礼まで。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問