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

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

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

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

Q&A

解決済

1回答

3433閲覧

「次へ」ボタンを押して値を一つずつ表示する

Kaffy

総合スコア10

C#

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

0グッド

0クリップ

投稿2016/11/03 09:42

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
基本情報技術者試験の単語を覚えるためのアプリを作成しています。「次へ」ボタンを用意して、クリックされるたびに単語を表示させようとしていますが、方法がわかりません。
現時点まで値を取得するDB接続・値取得クラスを用意、そして値を保持するメソッド(何度もDB接続をするのが面倒なため)を用意しましたが、どのように単語を次々表示させていくかがわからず悩んでおります。
初心者なのできれいなコードではありませんし、プログラムの流れもわかりづらくおかしいかもしれませんが、アドバイスを頂けたらと思っております。

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

###該当のソースコード

C#

1(ShowVocabForm) 2//MainForm 3namespace ShowVocabNotes 4{ 5 private void NextBtnClick(object sender, EventArgs e) 6 { 7 //値保持メソッド呼び出し 8 string[] vocabdatas = HoldDatas(datas); 9 { 10 bool btnclick = true; 11 12 if (btnclick) 13 { 14 15 for(int i = 0; i < vocabdatas.Length; i++) 16 { 17 VocabRichTextBox.Text = vocabdatas[i]; 18 19 } 20 } 21 } 22 } 23} 24//値を保持するメソッド 25 public string[] HoldDatas(string[] vocdatas) 26 { 27 //値を保持したいから箱を用意 28 Dictionary<string, string> datas = new Dictionary<string, string>(); 29 //DBUtilsクラスへ行って、DBから値を取得する 30 datas = DBUtils.GetData(datas); 31 //取得した値を配列にキャスト 32 vocdatas = new string[datas.Keys.Count]; 33 datas.Keys.CopyTo(vocdatas, 0); 34 35 return vocdatas; 36 }

###試したこと
for文を使用してみましたが、流れとしてはおかしい挙動になりました。

###補足情報(言語/FW/ツール等のバージョンなど)
OS: Windows10
DB: PostgreSQL
開発環境:Visual Studio2015

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

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

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

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

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

guest

回答1

0

ベストアンサー

  1. ボタンのイベントハンドラーでなにをすべきか

ボタンが1回おされれたときにやるべき処理しか書いてはいけません。ボタンを1回おされたときにやるべきは、次の単語一つだけを選んで表示することだけです。では「次の単語って、何番目の単語のことなのか」をどうやって決めればいいのでしょうか?答えはフォームクラスにフィールドを定義してそこに「今何番目を表示しているか」を覚えておくことです。

  1. ボタンのイベントハンドラーで何をすべきでないか

せっかくHoldDatasというメソッドを用意したのに、ボタンのイベントハンドラーでそれをよびだしてはダメです。一度しかやらない処理はこのフォームのロード時にやりましょう。HoldDatasをボタンのイベントハンドラーで呼び出してはいけないとなるとどうやってこのデータを参照すればよいのでしょうか?答えはFormのクラスにフィールドを定義しそこに覚えておくことです。

解決方法にはいろいろなやりかたがありますが、最も素朴な答えだけを回答してみました。他にもやりかたはいろいろありますがまずはフィールドを使ったプログラミングについて考えてみてください。

投稿2016/11/03 09:57

編集2016/11/03 09:59
KSwordOfHaste

総合スコア18394

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

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

Kaffy

2016/11/04 07:13

お返事ありがとうございます!今日フィールドについて調べてみました。 ただ、HoldDatasの扱い方がわからなくなってしまいました。 private string[] holddatas; とprivate int index; の二文Formクラスで定義して、そのあとが悩んでいます、、 初心者なので、知識不足ですが、アドバイスいただけたらと思います。
KSwordOfHaste

2016/11/04 07:26

定義したフィールドの値は同じクラスのメソッドのどれからでも参照・設定ができます。これを踏まえて考えてみてください。
Kaffy

2016/11/06 10:40

単語の表示できました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問