質問: 現在C#の入門書を参考に学習支援アプリケーション作っていて, ある程度完成してきたので追加機能として「科目名」で科目を選択するとその下の項目の「参考書」という欄にその科目の参考書が連動して表示させるというものを追加しようと考えたのですが, 色々調べてみたのですが方法がわかりませんでした. そこで質問なのですがこのような機能を実装するにはどうしたらいいのでしょうか? またそれに準ずる知識はどのような分野で得られるでしょうか? ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/41df9f16b8c5f3a1ad5ea40ed1f09417.png) ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/a6cfedf8663479f74b5ad79271f2e9f5.png)
回答: Sekiyu_さん、はじめまして。 プログラミングの勉強で色々と悩んでいらっしゃるようですね。 プログラミングの上達のひとつは、自分なりに何かを作りたいと思うことだと思います。 ですから、いまSekiyu_さんの取り組みはとても良いことだと思います。 自分はteratailをはじめたのはつい最近ですが、これから何かをはじめたい方のサポートが出来ればと考えています。 さて、今回のケースですが、やりたい事があるものの、どう質問してよいも分からない状況だとお見受けしました。 > > C#のデータベースについて > > > とありますが、何かしらデータベースを使用している状況でしょうか。 自分はWPFはほとんど触ったことがないので、現時点ではあまり有効な回答は出来ないかもしれないですが、とりあず見よう見まねで次のように画面を作ってみました。 !イメージ説明 とりあえず科目名にはそのままアイテムを追加しています。 ``` ``` 続いて、科目名のコンボボックス(`combobox`)をダブルクリックして、標準で作成されるコンボボックスの選択を変更した際のイベントを作成します。 そのイベント内にて、選択変更したアイテムの名称をデバッグ出力させてみます。 ``` private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { System.Diagnostics.Debug.WriteLine(comboBox.SelectedValue); } ``` デバッグで実行して、表示を確認してみます。 !イメージ説明 というわけで、コンボボックスのプロパティ、`SelectedValue`が、現在選択されている項目の値を返すことがわかります。 ただ、実は自分はこの回答を書く段階までわかっていませんでしたが、`SelectedValue`はそのままシンプルに文字列を返してくれるわけではないようですね。 コンボボックスにアイテムを追加する際に、``として登録した項目の型は、`ContentControl`であり、`Content="国語"`としたので、`Content`プロパティで取得できる。そのままですね。 さて、値が取れるのが分かりましたので、例えば、これをとりあえずデータベースではなく手作業で表示項目を作成した場合、次のようになります。 ``` private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { comboBox1.Items.Clear(); switch (((System.Windows.Controls.ContentControl)comboBox.SelectedValue).Content.ToString()) { case "国語": comboBox1.Items.Add("国語参考書1"); break; case "英語": comboBox1.Items.Add("英語参考書1"); break; case "数学": comboBox1.Items.Add("数学参考書1"); break; case "社会": comboBox1.Items.Add("社会参考書1"); break; case "理科": comboBox1.Items.Add("理科参考書1"); break; case "保健体育": comboBox1.Items.Add("保健体育参考書1"); break; } } ``` 実行してみます。まず、参考書には何も表示されていません。 !イメージ説明 "国語"を選択してみます。 !イメージ説明 参考書のコンボボックスに、"国語参考書1"が追加されています。 !イメージ説明 これで、科目名の選択に応じて、参考書に項目を表示できるようになりました。 参考になりましたでしょうか? 本来はこれをデータベースに接続して行うことになりますが、まずは最低限出来る方法からやってみようということで紹介しました。 以上 ちなみに・・・・ 今は分からないことがたくさんあると思います。 ですが、もし今自分が作ろうとしているものについて、「作りたい!」という意思があるのなら、そのモチベーションを失わない良い方法は、出来ないことがあったらすぐその回答を得てしまうことだと自分は考えています。 この考え方は人によっては否定的になるかと思います。なんでも人に頼ってしまい自分では考えなくなってしまう可能性があるからです。魚を与えるのではなく釣り方を教えるの考えですね。 自分もそうした考えに賛同していますが、何かをはじめて間もない時は、やりたい気持ちを失わないのが一番重要だと考えていますので、うまく出来なければ、遠慮せずに質問を出してください。 ただ、その際に、自力で解決できるようなヒントも合わせて回答していきたいと思います。 今回もそのヒントがあります。是非活用してください! あっちなみに、自分はWPFを良く知らないので、Sekiyu_さんがその画面をどのようなスタイルで作ったのかわかりませんでした。差し支えなければ教えてください!