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

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

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

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

Q&A

解決済

3回答

6858閲覧

C#でcomboBoxとButtonを組み合わせたい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

1クリップ

投稿2018/01/16 14:14

###前提・実現したいこと
C#で、webBrowserを〇秒毎に自動更新するプログラムの改良(comboBoxで更新の秒数を選びたい。)
(初心者な物で、説明不足であれば返信で詳細説明します。)

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

今現在、Buttonを使用して、何秒かをえらんでいるのですが、comboBoxにアイテムを追加するのは できたのですが、それを、開始ボタンを組み合わせる方法がわかりません。

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

C#

1 private void timer1_Tick(object sender, EventArgs e) 2 { 3 webBrowser1.Refresh(); 4 } 5 private void Button1_Click_1(object sender, EventArgs e)//ここと 6 { 7 timer1.Interval = 10000; 8 timer1.Enabled = true; 9 } 10 private void Button2_Click(object sender, EventArgs e)//ここを、comboBoxにしたい。ボタンとcomboBoxの組み合わせ方がわからないです 11 { 12 timer1.Interval = 30000; 13 timer1.Enabled = true; 14 } 15 private void Button3_Click_1(object sender, EventArgs e) 16 { 17 timer1.Enabled = false; 18 } 19

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

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

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

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

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

guest

回答3

0

ベストアンサー

手順を示します。
これは、コンボボックスにはあらかじめ"10000"と"30000"が追加されていることを前提としています。
もしそうではなく、"10秒", "30秒"といった形で追加している場合は、下のほうに記載してるパターンを確認してください。

① コンボボックスをダブルクリックしてSelectedIndexChangedイベントを追加します。
※ SelectedIndexChangedイベントはコンボボックスの選択肢を選んだ時に発生するイベントです。

C#

1 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 2 { 3 4 }

② コンボボックスで選択された項目の内容を取得します。
※ コンボボックスにはあらかじめ"10000"と"30000"を追加しておいてください。

C#

1 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 2 { 3 // ↓ selectedItemには選択された項目の文字列が代入されます。 4 string selectedItem = comboBox1.SelectedItem.ToString(); 5 }

③ selectedItemを数値型(int)に変換します。

C#

1 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 2 { 3 // ↓ selectedItemには選択された項目の文字列が代入されます。 4 string selectedItem = comboBox1.SelectedItem.ToString(); 5 // ↓ string型(文字列)からint型(数値型)に変換します。 6 int interval = int.Parse(selectedItem); 7 }

④ intervalをタイマーのIntervalプロパティに代入して、Enableプロパティをtrueにします。

C#

1 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 2 { 3 // ↓ selectedItemには選択された項目の文字列が代入されます。 4 string selectedItem = comboBox1.SelectedItem.ToString(); 5 // ↓ string型(文字列)からint型(数値型)に変換します。 6 int interval = int.Parse(selectedItem); 7 8 // ↓ timer1のIntervalプロパティに上のinterval変数の値を代入します。 9 timer1.Interval = interval; 10 // ↓ timer1のEnableプロパティにtrueを代入してタイマを開始します。 11 timer1.Enabled = true; 12 }

これで、コンボボックスの選択を変更することで、更新間隔を変更できます。

もしコンボボックスに"10秒"とか"10"という形式で追加している場合...

C#

1 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 2 { 3 // ↓ コンボボックスの選択されているindexを取得する 4 int index = comboBox1.SelectedIndex; 5 // indexとは、コンボボックスに追加されている項目の番号を表します。 6 // 例えば、コンボボックスに 7 // 10秒 8 // 30秒 9 // と追加されている場合、10秒はIndexが0になります。そして30秒はIndexが1になります。 10 // ※ 一般的にindexは0から始まります。 11 12 // ↓ indexに応じて、更新間隔(interval)を切り替える 13 int interval = 100000; 14 switch (index) 15 { 16 case 0: // 10秒を選択した場合 17 interval = 10000; 18 break; 19 case 1: // 30秒を選択した場合 20 interval = 30000; 21 break; 22 } 23 24 // ↓ timer1のIntervalプロパティに上のinterval変数の値を代入します。 25 timer1.Interval = interval; 26 // ↓ timer1のEnableプロパティにtrueを代入してタイマを開始します。 27 timer1.Enabled = true; 28 }

追記

質問者様より、Buttonをクリックしたタイミングで周期を変更することは可能か?という質問に対する回答を以下に示します。

コンボボックスのSelectedIndexChangedイベントではなく、Buttonクリックのタイミングで周期を変更することは可能です。
今回は新しいButton(button4)を追加することとします。

① 新しく追加したButtonをダブルクリックしてClickイベントを追加します。

C#

1 private void button4_Click(object sender, EventArgs e) 2 { 3 4 }

② コンボボックスの選択状態から更新周期を取得します。
※ 先の回答と同様にコンボボックスに追加されている項目のフォーマットにより2パターン方法があります。
パターン1 ・・・ コンボボックスに"10000"と"30000"が追加されている場合

C#

1 private void button4_Click(object sender, EventArgs e) 2 { 3 // ↓ selectedItemには選択された項目の文字列が代入されます。 4 string selectedItem = comboBox1.SelectedItem.ToString(); 5 // ↓ string型(文字列)からint型(数値型)に変換します。 6 int interval = int.Parse(selectedItem); 7 }

パターン2 ・・・ コンボボックスに"10秒"や"30"というような形で項目が追加されている場合

C#

1 private void button4_Click(object sender, EventArgs e) 2 { 3 // ↓ コンボボックスの選択されているindexを取得する 4 int index = comboBox1.SelectedIndex; 5 // indexとは、コンボボックスに追加されている項目の番号を表します。 6 // 例えば、コンボボックスに 7 // 10秒 8 // 30秒 9 // と追加されている場合、10秒はIndexが0になります。そして30秒はIndexが1になります。 10 // ※ 一般的にindexは0から始まります。 11 12 // ↓ indexに応じて、更新間隔(interval)を切り替える 13 int interval = 100000; 14 switch (index) 15 { 16 case 0: // 10秒を選択した場合 17 interval = 10000; 18 break; 19 case 1: // 30秒を選択した場合 20 interval = 30000; 21 break; 22 } 23 }

③ 更新周期(interval)をタイマーにセットします。
**パターン1 **

C#

1 private void button4_Click(object sender, EventArgs e) 2 { 3 // ↓ selectedItemには選択された項目の文字列が代入されます。 4 string selectedItem = comboBox1.SelectedItem.ToString(); 5 // ↓ string型(文字列)からint型(数値型)に変換します。 6 int interval = int.Parse(selectedItem); 7 8 // ↓ timer1のIntervalプロパティに上のinterval変数の値を代入します。 9 timer1.Interval = interval; 10 // ↓ timer1のEnableプロパティにtrueを代入してタイマを開始します。 11 timer1.Enabled = true; 12 }

**パターン2 **

C#

1 private void button4_Click(object sender, EventArgs e) 2 { 3 // ↓ コンボボックスの選択されているindexを取得する 4 int index = comboBox1.SelectedIndex; 5 // indexとは、コンボボックスに追加されている項目の番号を表します。 6 // 例えば、コンボボックスに 7 // 10秒 8 // 30秒 9 // と追加されている場合、10秒はIndexが0になります。そして30秒はIndexが1になります。 10 // ※ 一般的にindexは0から始まります。 11 12 // ↓ indexに応じて、更新間隔(interval)を切り替える 13 int interval = 100000; 14 switch (index) 15 { 16 case 0: // 10秒を選択した場合 17 interval = 10000; 18 break; 19 case 1: // 30秒を選択した場合 20 interval = 30000; 21 break; 22 } 23 24 // ↓ timer1のIntervalプロパティに上のinterval変数の値を代入します。 25 timer1.Interval = interval; 26 // ↓ timer1のEnableプロパティにtrueを代入してタイマを開始します。 27 timer1.Enabled = true; 28 }

以上です。イベントはコンボボックスのイベント(comboBox1_SelectedIndexChanged)からボタンのイベント(button4_Click)に変更しましたが、中身の処理は同じになります。
もしもボタンを追加せずに、すでにあるボタンを使いまわしたいのであれば、button4_Click関数の中身を別のイベントにコピーしてください。

投稿2018/01/18 03:18

編集2018/01/18 12:44
g_uo

総合スコア212

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

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

退会済みユーザー

退会済みユーザー

2018/01/18 11:26

なるほど。わかりやすい解説ありがとうございます。 これを、選択した直後。ではなく。選択して、隣にあるButtonを押せば。という風にできますか?
g_uo

2018/01/18 12:26

sehibz様 コメントありがとうございます。はい、可能です。 Buttonをひとつ追加したと仮定した場合、以下のコードで実現できます。 ※ コンボボックスには"10000"と"30000"が追加されている場合です。 ① 新しく追加ボタンをダブルクリックしてClickイベントを追加します。 private void button4_Click(object sender, EventArgs e) { } ② コンボボックスの値から更新周期(Interval)を取得します。 private void button4_Click(object sender, EventArgs e) { // ↓ selectedItemには選択された項目の文字列が代入されます。 string selectedItem = comboBox1.SelectedItem.ToString(); // ↓ string型(文字列)からint型(数値型)に変換します。 int interval = int.Parse(selectedItem); } ③ intervalをタイマーのIntervalプロパティに代入して、Enableプロパティをtrueにします。 private void button4_Click(object sender, EventArgs e) { // ↓ selectedItemには選択された項目の文字列が代入されます。 string selectedItem = comboBox1.SelectedItem.ToString(); // ↓ string型(文字列)からint型(数値型)に変換します。 int interval = int.Parse(selectedItem); // ↓ timer1のIntervalプロパティに上のinterval変数の値を代入します。 timer1.Interval = interval; // ↓ timer1のEnableプロパティにtrueを代入してタイマを開始します。 timer1.Enabled = true; } コンボボックスに"10秒"や”30秒”という形で項目が追加されている場合は以下の通りです。 private void button4_Click(object sender, EventArgs e) { // ↓ コンボボックスの選択されているindexを取得する int index = comboBox1.SelectedIndex; // indexとは、コンボボックスに追加されている項目の番号を表します。 // 例えば、コンボボックスに // 10秒 // 30秒 // と追加されている場合、10秒はIndexが0になります。そして30秒はIndexが1になります。 // ※ 一般的にindexは0から始まります。 // ↓ indexに応じて、更新間隔(interval)を切り替える int interval = 100000; switch (index) { case 0: // 10秒を選択した場合 interval = 10000; break; case 1: // 30秒を選択した場合 interval = 30000; break; } // ↓ timer1のIntervalプロパティに上のinterval変数の値を代入します。 timer1.Interval = interval; // ↓ timer1のEnableプロパティにtrueを代入してタイマを開始します。 timer1.Enabled = true; } 本コメントの内容を回答にも追記しておきますので、改めてそちらもご確認ください。
退会済みユーザー

退会済みユーザー

2018/01/18 13:13

詳しく、細かい所まで、解説していただき本当にありがとうございました。
guest

0

私が 新しい言語を勉強する時とか、何が書いてあるのか分からないソースを読む時とかにやるのが、ソースコードに一行ずつ コメントを入れていってみるということです。
特に勉強し始めの頃は もう本当に全行に入れる勢いで良いと思います。

以下のような感じでしょうか。

csharp

1// ボタン1がクリックされた時に呼ばれる処理 2private void Button1_Click_1(object sender, EventArgs e) 3{ 4 timer1.Interval = 10000; // タイマーの「〇秒毎」を設定 5 timer1.Enabled = true; // タイマーを有効にする 6}

それで、何をしているのか分からない箇所があれば調べる、といった感じですね。

上のソースも、コメントを入れてみると、どこを直せばよいか少し分かりませんか?
あとは「コンボボックスの値を取得する」方法を調べれば 出来そうな気がします。


ちなみに私は上記の作業を ソースコードをExcelに貼り付けてやってます。
(背景色を変えたり 文字色を変えたり 太字にしたり 吹き出し付けたり 色々できるので割と便利)

投稿2018/01/17 01:51

sk_3122

総合スコア1126

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

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

0

これは考え方の問題ですが、コンボボックスにして、ボタンを一つ配置。

自作の関数を一つ作る。

ボタンのクリックイベントで先ほどの自作関数を呼ぶ。

関数の中で

  • コンボボックスの値を読み取る。
  • その値でtimerに指定値をswitchなりで判定して組み込む

ですかね。

コンボボックスの値の取得やswitch文などはサイトを参考にして下さい。

この文章で分からないようだと今後がかなり厳しいと思いますよ。

投稿2018/01/16 18:19

landy77

総合スコア1614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問