現在C#の入門書を参考に学習支援アプリケーション作っていて, ある程度完成してきたので追加機能として「科目名」で科目を選択するとその下の項目の「参考書」という欄にその科目の参考書が連動して表示させるというものを追加しようと考えたのですが, 色々調べてみたのですが方法がわかりませんでした. そこで質問なのですがこのような機能を実装するにはどうしたらいいのでしょうか? またそれに準ずる知識はどのような分野で得られるでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
Sekiyu_さん、はじめまして。
プログラミングの勉強で色々と悩んでいらっしゃるようですね。
プログラミングの上達のひとつは、自分なりに何かを作りたいと思うことだと思います。
ですから、いまSekiyu_さんの取り組みはとても良いことだと思います。
自分はteratailをはじめたのはつい最近ですが、これから何かをはじめたい方のサポートが出来ればと考えています。
さて、今回のケースですが、やりたい事があるものの、どう質問してよいも分からない状況だとお見受けしました。
C#のデータベースについて
とありますが、何かしらデータベースを使用している状況でしょうか。
自分はWPFはほとんど触ったことがないので、現時点ではあまり有効な回答は出来ないかもしれないですが、とりあず見よう見まねで次のように画面を作ってみました。
とりあえず科目名にはそのままアイテムを追加しています。
lang
1 <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="300,17,0,0" VerticalAlignment="Top" Width="207" SelectionChanged="comboBox_SelectionChanged"> 2 <ComboBoxItem Content="国語" HorizontalAlignment="Left" Width="205"/> 3 <ComboBoxItem Content="英語" HorizontalAlignment="Left" Width="205"/> 4 <ComboBoxItem Content="数学" HorizontalAlignment="Left" Width="205"/> 5 <ComboBoxItem Content="社会" HorizontalAlignment="Left" Width="205"/> 6 <ComboBoxItem Content="理科" HorizontalAlignment="Left" Width="205"/> 7 <ComboBoxItem Content="保健体育" HorizontalAlignment="Left" Width="205"/> 8 </ComboBox>
続いて、科目名のコンボボックス(combobox
)をダブルクリックして、標準で作成されるコンボボックスの選択を変更した際のイベントを作成します。
そのイベント内にて、選択変更したアイテムの名称をデバッグ出力させてみます。
lang
1 private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 2 { 3 System.Diagnostics.Debug.WriteLine(comboBox.SelectedValue); 4 }
というわけで、コンボボックスのプロパティ、SelectedValue
が、現在選択されている項目の値を返すことがわかります。
ただ、実は自分はこの回答を書く段階までわかっていませんでしたが、SelectedValue
はそのままシンプルに文字列を返してくれるわけではないようですね。
コンボボックスにアイテムを追加する際に、<ComboBoxItem Content="国語" ...
としています。
一度、デバッグでその場所を止めて、どのような情報となっているかウォッチしてみます。
見たい場所にブレークポイントを設定します。ショートカットは F9 ですね。
ブレークポイントでとまったら、SelectedValue
の場所にカーソルを合わせます。
表示を展開して、"国語"だけを取得できるプロパティを探してみます。
ありました。Content
ですね。
さらに、詳しい情報を見るため、虫眼鏡のアイコンをクリックして、[テキスト ビジュアライザー]ダイアログを表示させて確認します。
((System.Windows.Controls.ContentControl)comboBox.SelectedValue).Content
とかなていますね・・・
「キャスト」はわかりますでしょうか?とりあえず、ここでは説明を省きますね・・・
先ほどのデバッグ出力でコレをそのまま書き込んでみます。
lang
1 private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 2 { 3 System.Diagnostics.Debug.WriteLine(((System.Windows.Controls.ContentControl)comboBox.SelectedValue).Content); 4 }
なるほど。
<ComboBoxItem Content="国語" HorizontalAlignment="Left" Width="205"/>
として登録した項目の型は、ContentControl
であり、Content="国語"
としたので、Content
プロパティで取得できる。そのままですね。
さて、値が取れるのが分かりましたので、例えば、これをとりあえずデータベースではなく手作業で表示項目を作成した場合、次のようになります。
lang
1 private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 2 { 3 comboBox1.Items.Clear(); 4 switch (((System.Windows.Controls.ContentControl)comboBox.SelectedValue).Content.ToString()) 5 { 6 case "国語": 7 comboBox1.Items.Add("国語参考書1"); 8 break; 9 case "英語": 10 comboBox1.Items.Add("英語参考書1"); 11 break; 12 case "数学": 13 comboBox1.Items.Add("数学参考書1"); 14 break; 15 case "社会": 16 comboBox1.Items.Add("社会参考書1"); 17 break; 18 case "理科": 19 comboBox1.Items.Add("理科参考書1"); 20 break; 21 case "保健体育": 22 comboBox1.Items.Add("保健体育参考書1"); 23 break; 24 } 25 }
参考書のコンボボックスに、"国語参考書1"が追加されています。
これで、科目名の選択に応じて、参考書に項目を表示できるようになりました。
参考になりましたでしょうか?
本来はこれをデータベースに接続して行うことになりますが、まずは最低限出来る方法からやってみようということで紹介しました。
以上
ちなみに・・・・
今は分からないことがたくさんあると思います。
ですが、もし今自分が作ろうとしているものについて、「作りたい!」という意思があるのなら、そのモチベーションを失わない良い方法は、出来ないことがあったらすぐその回答を得てしまうことだと自分は考えています。
この考え方は人によっては否定的になるかと思います。なんでも人に頼ってしまい自分では考えなくなってしまう可能性があるからです。魚を与えるのではなく釣り方を教えるの考えですね。
自分もそうした考えに賛同していますが、何かをはじめて間もない時は、やりたい気持ちを失わないのが一番重要だと考えていますので、うまく出来なければ、遠慮せずに質問を出してください。
ただ、その際に、自力で解決できるようなヒントも合わせて回答していきたいと思います。
今回もそのヒントがあります。是非活用してください!
あっちなみに、自分はWPFを良く知らないので、Sekiyu_さんがその画面をどのようなスタイルで作ったのかわかりませんでした。差し支えなければ教えてください!
投稿2017/01/13 18:35
総合スコア146
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/13 18:55
2017/01/13 19:15 編集