チェックボックスの操作方法について教えてください

このQ&Aのポイント
  • 前回ボタンクリックでチェックボックス768個をまとめてON/OFFするプログラムを作成しましたが、1個ずつ操作するプログラムを作りたいです。
  • 前回のプログラムを参考にしましたが、想定した動作ができません。特にボタンクリック時のエラーに困っています。
  • 初心者向けに分かりやすく説明していただけると助かります。ボタンクリックと同じ場所に飛ばすことが原因でエラーが発生していることは分かっています。
回答を見る
  • ベストアンサー

複数のチェックボックス

困ってます。 前回ボタンクリックでチェックボックス768個を全部ONにしたりOFFにしたりするプログラムを教えてもらい何とかできたのですが、768個のチェックボックスを1個1個押したときのプログラムを一つにまとめたい場合は、どうすればよかったのでしょうか。 前回教えてもらった物をヒントに作ったのですが思った動きをしません。 初心者にわかりやすく教えてもらえますか。 ボタンクリックと同じ場所に飛ばしているせいか  Select Case DirectCast(sender, Button).Name のbuttonでエラーが出ることが分かっています。 ただいろいろやりましたがSelectCase文で行っても1個のチェックボックスには反応しますがほかのチェックボックスは無視します。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

CheckBoxをButtonにキャストしようとしていることが原因のように思えます。 CheckBoxとButtonを50個ずつ生成し、同じイベントハンドラを共用するサンプルを書いてみたので参考にしてみてください。 CheckBoxの名前は CheckBox00, CheckBox01 ・・・としてあります。 Buttonの名前は Button00, Button01 ・・・としてあります。 Public Class Form1 Private ctlCheck As CheckBox() = {} Private ctlButton As Button() = {} Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Array.Resize(ctlCheck, 50) Array.Resize(ctlButton, 50) For i As Integer = 0 To 49 ' CheckBoxの作成 ctlCheck(i) = New CheckBox() ctlCheck(i).Name = "Check" + i.ToString("D2") ctlCheck(i).Text = i.ToString() ctlCheck(i).Location = New Point(4, i * 20) ctlCheck(i).Size = New Size(30, 18) ' Buttonの作成 ctlButton(i) = New Button() ctlButton(i).Name = "Button" + i.ToString("D2") ctlButton(i).Text = i.ToString() ctlButton(i).Location = New Point(80, i * 20) ctlButton(i).Size = New Size(30, 18) ' イベントハンドラの登録(Clickイベントを同じメソッドで) AddHandler ctlCheck(i).Click, AddressOf ControlClick AddHandler ctlButton(i).Click, AddressOf ControlClick Panel1.Controls.Add(ctlCheck(i)) Panel1.Controls.Add(ctlButton(i)) Next End Sub Private Sub ControlClick(ByVal sender As Object, ByVal e As EventArgs) ' コントロールの種類で振り分ける If TypeOf sender Is Button Then ' senderがButtonの場合 Select Case DirectCast(sender, Button).Name Case "" ' 割愛 End Select ElseIf TypeOf sender Is CheckBox Then ' senderがCheckBoxの場合 Select Case DirectCast(sender, CheckBox).Name Case "" ' 割愛 End Select End If ' または ' ButtonもCheckBoxもControlから派生しているので、ControlにキャストすればどちらでもNameを取れる Select Case DirectCast(sender, Control).Name Case "" ' 割愛 End Select End Sub End Class イベントハンドラをコントロールで分けるのであれば AddHandler ctlCheck(i).Click, AddressOf CheckBoxClick AddHandler ctlButton(i).Click, AddressOf ButtonClick として、CheckBocClickメソッドとButtonClickメソッドを用意してください。引数は上記サンプルのControlClickメソッドと同じです。

kou1012
質問者

お礼

返事遅くなりすみません。 回答ありがとうございました。 いろいろと試してみましたが、コントロールを分けるのが一番ベストですね。 後現在、チェックボックスをクリックするとテーブルにより値が入るように考えたのですが、非常に不細工なものになってしまいました。 何かもう少し簡潔なテーブルの設定方法はないものでしょうか。 Dim aa(767, 1) As Integer Dim x As Short Dim a As Short Dim bb As Short Dim cc As Short bb = 0 cc = 0 For x = 0 To 1157 For a = 0 To 1 Select Case a Case 0 If x < 8 Then bb = bb + 1 aa(x, a) = bb ElseIf x < 18 Then If x > 9 Then bb = bb + 1 aa(x, a) = bb ElseIf x = 8 Then bb = 0 End If 省略 ElseIf x < 1158 Then If x > 1149 Then bb = bb + 1 aa(x, a) = bb ElseIf x = 1148 then bb = 0 End If End If Case 1 If x < 8 Then If x = 0 Then cc = cc + 1 End If aa(x, a) = cc ElseIf x < 18 Then If x > 9 Then If x = 10 Then cc = cc + 1 End If aa(x, a) = cc End If 以下省略 End If End Select Next Next

その他の回答 (1)

回答No.2

補足のコードを見る限り、a=0のときは bb = bb + 1 aa(x, a) = bb と bb = 0 の2種類に分かれるようですね。さらに、bb = 0とするのは常に定数のようなので、 If a = 0 Then   Select Case x     Case 8, ?, ?, ?, 1148 ' ←ここに bb = 0 にする定数をkカンマ区切りで並べる       bb = 0     Case Else       bb += 1       aa(x, a) = bb   End Select End If といった具合にできると思います。次に、a = 1 については特定の値のときに cc = cc + 1 とし、すべてのパターンで aa(x, a) = cc が実施されるように見えます。 If a = 1 Then   Select Case x     Case 0, 10, ?, ?, ?       cc += 1   End Select   aa(x, a) = cc End If といった具合にできそうです。 条件判定はもっと複雑なのかもしれませんが全容が見えないのでご提示されたコードの範囲で考えてみました。 配列の上限値とループの上限値が異なるのが気になりますが、コピペミスですかね?(このまま動かすと配列限界を超えます) またこの処理がチェックボックスの変動とどのように関連するのかも不明です。どのようなことをしたいのか、が明確に教えてもらえればより解決に近い回答が得られると思いますよ。

kou1012
質問者

お礼

ありがとうございました。 簡潔にまとめることができました。 本当にありがとうございました。 どのようなことをしたいのか、が明確に教えてもらえればより解決に近い回答が得られると思いますよ。 現在、I/Oボードのチェック用プログラムを作成しています。 1ボードに16個のポートがあり1個のポートに8個のOUTPUTが出来るので128個×6ボード分の768個のOUTPUTがありチェックボックスにチェックを入れるとポート番号と、OUTPUT番号がボードに送られてランプがつき チェックを外すとランプが消えるプログラムを作成しています。 これで基板の配線ミスやコードのつなぎ間違いなどをチェックします。 配列の上限値とループの上限値が異なるのが気になりますが、コピペミスですかね?(このまま動かすと配列限界を超えます) 私の勘違いでチェックボックスが768個ですがOUTPUT番号とポート番号と連動できるようにチェックボックスの名前の後ろに0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,21,・・・・・・157, 200,201,202,203,204,・・・357,400,401・・・・,1157 と続けたのですが、番号数ではなくチェックボックスの数で配列の数を決めたので間違えてしまいました。

関連するQ&A

  • チェックボックスの一括チェック

    ボタンをクリックしたときに チェックボックスの一括チェック が行われるようにしたいのです チェックボックスの名前は g1 g2 g3 g4 g5 g6 フォーム名は mlForm なので <script language="Javascript"> function zen_cl1() { document.mlForm.g1.click(); document.mlForm.g2.click(); document.mlForm.g3.click(); document.mlForm.g4.click(); document.mlForm.g5.click(); document.mlForm.g6.click(); } </script> ボタンを <input name="zencheck" type="button" id="zencheck" onClick="zen_cl1()" value="全部選択/解除"> このように書くと エラーが起こるのです いい方法はないでしょうか

    • ベストアンサー
    • HTML
  • 複数のチェックボックスを一括で更新

    データをPerlで読み込み、下のようにHTMLでチェックボックスと並べています。 年月日  名前 チェック 20060101 山田 □ 20060501 山田 □ 20060404 田中 □ 20060811 中田 □ 20060901 斉藤 □ 20061003 宮前 □ |更新ボタン| →ボタンをクリックすると更新 チェックを入れるとチェックを入れた状態を1なり値なりで更新されるようにしたいです。 データ↓ 1,20060101,山田,1 2,20060501,山田, 3,20060404,田中, 4,20060811,中田,1 5,20060901,斉藤, 6,20061003,宮前,          ↑の"1"がチェックしたところです。 行(レコード)の数は不特定でPERLで読み込んだり、書き込んだりしています。 チェックボックスには$idがついており、1行1行、name=1とかname=2、name=3と名前が付けられています。 なるべくここまできたらモジュールを使わないで実現したいところです。 わかりやすい方法を教えて頂ければ幸いです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHPでチェックボックスの結果を離れた配列に入れる

    PHPにて、複数あるチェックボックスの操作結果(オン/オフ)を変数に格納する方法を探しています。 予定として プログラム実行 → ボタンが1つと、チェックボックスが複数表示される → チェックボックス操作 → ボタンを押す → 複数のオン/オフ状況が配列に格納される といったものを作りたいと考えています。 現在はそのためのテストとして、ボタンを押した際のオン/オフの状況が画面に順に表示されるものを作っていますが、変数がUndefined Indexであると言われ、表示することができません。 現在のプログラムは下の通りです。 実際のプログラム上では、(1),(2),(3)はそれぞれソース内のかなり離れた場所にあります。 各チェックボックス(各<form>~</form>)毎にボタンを用意していないのが原因であるとは思うのですが、ボタンは特定の箇所に1つだけ用意したいと考えています。 またチェックボックス表示部とボタン表示部は(ソース的に)離れているため、 ボタン表示部で<form>を開いて、開いたまま進み、チェックボックス表示部が終わってやっと閉じる、という方法は難しいと思います。 どうすればチェックボックスの結果を離れた箇所にある配列に入れることができるのでしょうか。 宜しくお願いします。 [regist.php] <?php //(1) 更新ボタンを押すとチェックボックスのon/off結果が表示される if(isset($_POST['cmd_Print'])){ $check = $_POST["cb"]; for($i=0; $i<count($check); $i++){ print "${check[$i]}<br>"; } } //(2) 更新ボタンの表示 print("<form method=\"post\" action=\"regist.php\">"); print("<input type=\"submit\" name=\"cmd_Print\" value=\"結果表示\">"); print("</form>"); //(3) チェックボックス(on,off)を交互に表示 for($i=0; $i<5; $i++){ //チェックボックスをオンの状態で表示 print("<form method=\"POST\" action=\"./regist.php\">"); print sprintf('<input type="hidden" name="cb[]" value="off">'); print sprintf('<input type="checkbox" name="cb[]" value="on" checked="checked">'); print("</form>"); //↑チェックボックス操作後、オフの状態なら$cb[]に"off"を、オンの状態なら$cb[]に"on"を入れる //チェックボックスをオフの状態で表示 print("<form method=\"POST\" action=\"./regist.php\">"); print sprintf('<input type="hidden" name="cb[]" value="off">'); print sprintf('<input type="checkbox" name="cb[]" value="on">'); print("</form>"); //↑チェックボックス操作後、オフの状態なら$cb[]に"off"を、オンの状態なら$cb[]に"on"を入れる } ?>

    • 締切済み
    • PHP
  • チェックボックスから複数のvalueを取り出す

    HTMLフォームから、action="file.php"でデータの受け渡し→PHPで送られてきたvalueに応じて文章を出力、というプログラムを作っています。 例: グループAのラジオボタン1にチェック、送信 →グループAで押されたラジオボタンを送信されたvalueで判別、この場合はvalue==A →value==Aの場合に表示する文章を変数に受け渡し、その変数で表示 ラジオボタン、テキストボックスのvalueは$_POST['XXX']で取り出せたのですが、チェックボックスのデータだけが取り出せません。こちらの質問を検索したとき、多次元配列という言葉を見かけたのですが、いまいちよく分かりませんでした。 チェックボックスの複数のvalueで、上記の例のような動きを実現させるにはどうしたらいいでしょうか。どなたかご教授ください。

    • ベストアンサー
    • PHP
  • チェックボックスに連動する画像ボタン

    webページで、チェックボックスにチェックを入れないとアクティブにならないロールオーバーボタン(画像)を設定したいのですが、方法がわかりません。 【チェックボックスにチェックが入っていない状態】 ボタンが反転しており、クリックで動作(ページ遷移)しない (ボタンがグレー状態になっているなど) 【チェックボックスにチェックが入っている状態】 ボタンが変化し、クリックで動作する (ボタンの画像が変わり、ロールオーバーも可能) このような形にしたいと思っています。 今のところ input typeがbutton だとうまくいくのですが input type image で動作しないという状態です。

  • チェックボックスのチェック

    チェックボックスのチェックして送信した後のページから送信前のページに戻るとチェックボックスがチェックされた状態でブラウザで表示されます 1 2ここにチェックを入れて削除すると 3 1 3戻るを押した時にここにチェックが入ってしまいます javascriptで戻るボタンをつくっていますが他にチェックが残らずにに戻る方法はありますか? <input type=button value="戻る" onClick="history.back()"> よろしくお願いします

    • ベストアンサー
    • HTML
  • 複数式のチェックボックス

     こんにちは。 お昼からjavateaです。 PG初級者なので教えてください。(o⌒∇⌒o) 今複数式のチェックボックスを作っているのですが、これをボタンがクリックされたときに表示するようにしたいです。例えばボタンが押されたら46都道府県(46個)のチェックボックスが同画面に小さく出てきて複数個選択できる。そして選択したものの情報が値として送られる。 分かりにくくてすいませんが、このような物は出来ますでしょうか??よろしくお願いします。(*^▽^*) あ、分からないところは「複数個チェックボタンを作るところ」や「値の受け渡し」ではなく「プルダウンみたいな感じでチェックボックスを表示させるところです。」**

  • HTML内外におけるチェックボックスの扱い

    ASPにおけるチェックボックスに関するご質問させていただきます。 現在、ASPファイルにおいて、チェックボックスを使用したプログラムを組んでいます。 作成しようとしているプログラムは、 「該当チェックボックスをチェックしたか否かで、確定ボタンを押したあとの移動先URLを変更する」ものです。 プログラムは以下のようになっています。 [abc.asp] <%@script language = vbscript %> Function SelectURL()  チェックされたチェックボックスの値を知りたい・・・☆ End Function <HTML> <HEAD> </HEAD> <BODY> <FORM NAME=frmCheck>    <INPUT TYPE=checkbox NAME=c1 VALUE="001">チェックボックス1    <INPUT TYPE=checkbox NAME=c2 VALUE="002">チェックボックス2    <INPUT TYPE=checkbox NAME=c3 VALUE="003">チェックボックス3 </FORM> </BODY> </HTML> このような状態です。 チェックボックスのうち、チェックされているもののVALUE値を知りたいのです。 値を知りたい場所は、☆印のある場所でです。 HTML内においては、document.frmCheck.c1.checked、.value等でチェックの有無は確認できるのですが、☆印はHTMLの外にあります。 何かアドバイスをいただければと思います。よろしくお願いします。

  • チェックボックスのON/OFF

    こんにちは。 以下のようなテーブルがありまして <tr> <td>チェックボックス</td> <td>ID</td> <td>名前</td> </tr> このテーブルのTRのどこかをクリックするとチェックボックスを ON/OFFする方法のヒントを頂けないかと思って質問に参りました イメージとしては<label for="">の機能をTRに付けたいのです 作表とチェックボックスの環境としましては データベースから取り出したデータをforで回してテーブルに配置 チェックボックスのタグは各行に1つでこれのON/OFFがしたい チェックボックスのデータは配列で送りたいので○○[]名称 となっております (この辺りにはPHPを使用しています) セルクリックで背景色を変更するサンプルと、チェック全選択/全解除の サンプルはあるのですが、組み合わせや加工の仕方がわからず 調べてみてもチェックボックスをクリックしたら…というサンプルばかりで 私が求めている方法は残念ながら見つけられませんでした こんな質問だと丸投げになってしまうので、ヒントや処理の流れだけでも 教えて頂けると助かります ヨロシクお願いします

  • チェックボックスのオンオフ

    チェックボックスを配置して、チェックボックスがオンになった時に 測定器と通信して数値データを表示するプログラムを作っています。 数値データは刻一刻と変化するので、チェックボックスがオンの時は Loopで数値データを取得するようにしています。 数値データの取得を止めたいときはチェックボックスを再度クリックして 終了したいのですが、Loopの中に入っているとチェックボックスを クリックしても反応しません。 何か方法はありませんか?チェックボックス以外のボタンを配置して Loopを抜けるようにしないと駄目ですか? Private Sub Checkbox1_Click() If Checkbox1= 1 Then Do 数値データを取得して、画面上に表示するプログラム(チェックボックスのクリックが効かない) Loop End If End Sub

専門家に質問してみよう