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

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

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

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

Q&A

解決済

1回答

1816閲覧

C#のデータベースについて

Sekiyu_

総合スコア35

C#

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

1グッド

2クリップ

投稿2017/01/13 15:03

現在C#の入門書を参考に学習支援アプリケーション作っていて, ある程度完成してきたので追加機能として「科目名」で科目を選択するとその下の項目の「参考書」という欄にその科目の参考書が連動して表示させるというものを追加しようと考えたのですが, 色々調べてみたのですが方法がわかりませんでした. そこで質問なのですがこのような機能を実装するにはどうしたらいいのでしょうか? またそれに準ずる知識はどのような分野で得られるでしょうか?
イメージ説明
イメージ説明

rrryutaro👍を押しています

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

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

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

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

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

guest

回答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

rrryutaro

総合スコア146

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

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

Sekiyu_

2017/01/13 18:55

回答ありがとうございます! 質問のことから学習姿勢のことまで色々とありがとうございます...おっしゃる通り「何を質問すればいいかわからない」状態で, 周りに聞けるような人もおらず自分で調べ見てもわからないというような状況が3日程続いていおりました... 回答を参考に今回の問題, 更にはこれからの学習も頑張っていこうと思います! 本当にありがとうございました!!
rrryutaro

2017/01/13 19:15 編集

自分もこんな時間になんですが、ちゃんと寝てくださいね! この質問の前の『初心者からの脱却について』についてもざっくり皆さんの意見を読んでみましたが、皆さんがおっしゃる心構えなどは、技術者として"この先生きのこる"ためにも重要なことをおっしゃっていると思います。 同じく事を繰り返しますが、それゆえに、自分のようにすぐ直接の答えなどを回答することは望ましくない場合もあります。 ですが、今の状態はまずプログラミングを楽しめるようになることですから、3日もまよわず、このサイトのコンセプトでもある「15分調べても分からないことは、質問しよう!」の精神で進めていくのがよいと思います。 ですから、どうか質問することに萎縮せずに、それで怒られたって、将来出来るようになれば良いのだと思います。 頑張ってください! ちなみに、調べ物など例えば、自分はまず次のように検索したりします。 ※こっちのコメント欄はMarkdownじゃないのかな??(自分も扱いなれていないサイトではこういうへまをします。でも、そのまま載せておきます・・・) [Googleで”C# wpf はじめて”として検索](https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=C%23+wpf+%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6) そこで、見つかった次のような記事を試してみたりなど。(まだ試してみないので、一応やってみようかなと思っています) [チュートリアル: 初めての WPF デスクトップ アプリケーション](https://msdn.microsoft.com/ja-jp/library/mt270964.aspx)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問