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

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

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

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

1回答

4638閲覧

Treeviewの任意のノードを選択状態にしたい

sakato

総合スコア1

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

1グッド

0クリップ

投稿2021/12/20 09:32

初めまして。現在Windowsアプリの勉強中です。
こちらのサイトを初めて使うため、質問の仕方がおかしかったり不足している情報があれば教えてください。

前提・実現したいこと

ボタンを押したときにTreeviewの特定のノードを選択状態にしたいです。
しかし現在以下の2つがわかりません。

発生している問題・エラーメッセージ

1.SelectNodeで選択したいノードを選択したつもりなのにAfterSelectのイベントが動かない

Treeviewに表示されているノードをクリックすると、コンソールにそのテキストを返すプログラムです。
これをマウスでノードをクリックするのではなく、ボタンを押したときに任意のノードを選択状態(クリックしたのと同じ)にしたいです。
自分の想定ではTopNodeを指定したので、aaaaと表示されるかと思ったのですが表示されず、デバッグで止めてみてもtreeView1_AfterSelectに入っていないようでした。
どのように記述すればtreeView1_AfterSelectを動かせるのでしょうか?

該当のソースコード

private void Form3_Load(object sender, EventArgs e) { treeView1.Nodes.Add("aaaa"); treeView1.Nodes.Add("bbbb"); } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { Console.WriteLine(e.Node.Text); } private void button1_Click(object sender, EventArgs e) { TreeNode node = treeView1.TopNode; treeView1.SelectedNode = node; }

発生している問題・エラーメッセージ

2.TopNode以外の指定の仕方がわからない
本来ならば「aaaaボタン」を押したらTreeviewのaaaaが選択状態になってコンソールにaaaaと表示、「bbbbボタン」を押したらTreeviewのbbbbが選択状態になってコンソールにbbbbと表示される
としたいのですが、選択したいノードをNode.Textで指定する方法が調べてもわかりませんでした。(TopNodeの指定もうまくはいっていませんが)
すみませんが、何か良い方法があれば教えていただきたいです。

補足情報(FW/ツールのバージョンなど)

WindowsForm

TN8001👍を押しています

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

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

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

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

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

TN8001

2021/12/20 10:55 編集

1. についての確認です。 > aaaaと表示されるかと思ったのですが表示されず 普通にマウスでクリックした場合は表示されますか? > デバッグで止めてみてもtreeView1_AfterSelectに入っていないようでした。 treeView1_AfterSelectにブレークポイントを設定し、デバッグの開始(緑▶)をしても止まらないということですね? マウスで選択したときは止まるが、ボタンから選択すると止まらないということですか? 実は選択は変わっているってことはありませんか? TreeViewはデフォルトだと、フォーカスがないと選択が見えません。 HideSelectionをfalseにするか(フォーカスがない時も選択をグレーで表示) button1_Clickで treeView1.Focus() とでもする(問答無用でフォーカスをあてる) とするとどうなりますか?
sakato

2021/12/20 11:03

>TN8001さん インラインで失礼します。 >普通にマウスでクリックした場合は表示されますか? はい、マウスでTreeviewの「aaaa」や「bbbb」をクリックした場合はtreeView1_AfterSelectに入り、その文字列がコンソールに表示されます。 >treeView1_AfterSelectにブレークポイントを設定し、デバッグの開始(緑▶)をしても止まらないということですね? >マウスで選択したときは止まるが、ボタンから選択すると止まらないということですか? その通りです。 マウスでTreeviewの「aaaa」「bbbb」を選択したときはtreeView1_AfterSelect内に入ることが確認できましたが、button1をクリックした際にはtreeView1_AfterSelectのブレークポイントで止まらない=treeView1_AfterSelectに入っていないという認識です。 >HideSelectionをfalseにするか(フォーカスがない時も選択をグレーで表示) >button1_Clickで treeView1.Focus() とでもする(問答無用でフォーカスをあてる) とするとどうなりますか? ともに変化はなく、treeView1_AfterSelectは動いていないようでした
TN8001

2021/12/20 11:18

あとはbutton1_Click自体入っていないくらいしか思いつきませんね。。。 こちらの手元ではボタンでも表示されました(もちろんすでにTopが選択されていると表示しませんが
TN8001

2021/12/20 11:25 編集

2. について Key(Name)を設定すればTreeNodeCollection.Findが使えますが、Textじゃないとダメですか? だとすると↓のような全列挙していくような方法しかなさそうですが。 [C# - c# treeViewのfullPathを利用したnode選択|teratail](https://teratail.com/questions/255446
sakato

2021/12/20 11:45

>TN8001さん 大変失礼いたしました。 >もちろんすでにTopが選択されていると表示しませんが すでにTopが選択されている状態で動かしていました。 既に選択状態だとAfterSelectは動かないのですね。 また、Keyが設定できることもしらなかったので大変勉強になりました。 こちらを設定すればうまくできそうです! ありがとうございました
guest

回答1

0

自己解決

TN8001様のご指摘通り、Topが既に選択されている状態で再度TopNodeを指定していたために期待する動作になりませんでした。

また、Keyが設定できるということだったのでそちらを用いて②も解決しようと思います。

ありがとうございました。

投稿2021/12/20 11:47

sakato

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問