C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: ボタンを使ってチェックボックスの操作を行いたい


(過去ログ 164 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■94861 / inTopicNo.1)  ボタンを使ってチェックボックスの操作を行いたい
  
□投稿者/ お願いします (1回)-(2020/05/27(Wed) 19:08:52)

分類:[.NET 全般] 

初心者です。
私は現在、Windows10を使い、VisualStudio2012のVBで作業を行なっております。言語はVB.NETだと思います。
ある作業を行いたいため質問させていただきます。

行いたい作業は、

・何もチェックせずに実行ボタンを押すと全部チェックされ、メッセージボックスでチェックされたことを表示
・すべてチェックされた状態でボタンを押すとチェックを解除し、メッセージボックスで解除されたことを表示
・実行ボタンを押すとチェックした個数をメッセージボックスで表示 (例:二つチェックした場合 →  ”二つチェックしました。”)

です。
前提としてチェックボックスが3つ、ボタンを1つ用意し、ボタンを押すことで上記の作業が実行されます。
お答えいただけたらとてもありがたいです。
どうかよろしくお願いいたします。
引用返信 編集キー/
■94862 / inTopicNo.2)  Re[1]: ボタンを使ってチェックボックスの操作を行いたい
□投稿者/ 魔界の仮面弁士 (2728回)-(2020/05/27(Wed) 21:03:50)
No94861 (お願いします さん) に返信
> 言語はVB.NETだと思います。
「メッセージボックス」ということは、Windows Forms アプリケーションでしょうか?

> ・実行ボタンを押すとチェックした個数をメッセージボックスで表示 (例:二つチェックした場合 →  ”二つチェックしました。”)
2 ではなく 二 と表示したいのですね?


Private Sub 実行ボタン_Click(sender As Object, e As EventArgs) Handles 実行ボタン.Click
  Dim boxes As CheckBox() = {CheckBox1, CheckBox2, CheckBox3}
  Select Case boxes.Count(Function(c) c.Checked)
    Case 0
      Array.ForEach(boxes, Sub(c) c.Checked = True)
      MsgBox("チェックされた", MsgBoxStyle.Information)
    Case 1
      MsgBox("一つチェックしました。", MsgBoxStyle.Information)
    Case 2
      MsgBox("二つチェックしました。", MsgBoxStyle.Information)
    Case 3
      Array.ForEach(boxes, Sub(c) c.Checked = False)
      MsgBox("解除された", MsgBoxStyle.Information)
  End Select
End Sub
引用返信 編集キー/
■94863 / inTopicNo.3)  Re[2]: ボタンを使ってチェックボックスの操作を行いたい
□投稿者/ お願いします (3回)-(2020/05/27(Wed) 21:37:17)
No94862 (魔界の仮面弁士 さん) に返信

魔界の仮弁護士さん、ご返信ありがとうございます。

> 「メッセージボックス」ということは、Windows Forms アプリケーションでしょうか?
  はい、おっしゃる通りWindows Formです。

> 2 ではなく 二 と表示したいのですね?
  記入方法が不適切で申し訳ありませんでした。漢数字の 二 ではなく、数字の2で問題ありませんでした。ご丁寧にありがとうございます。

都合により検証は明日になってしまいますが、またご連絡いたします。
重ねましてありがとうございます。

引用返信 編集キー/
■94865 / inTopicNo.4)  Re[3]: ボタンを使ってチェックボックスの操作を行いたい
□投稿者/ 魔界の仮面弁士 (2729回)-(2020/05/28(Thu) 10:41:34)
No94863 (お願いします さん) に返信
> ■No94862 (魔界の仮面弁士 さん) に返信
> 魔界の仮弁護士さん、ご返信ありがとうございます。

魔界の仮弁護士? いえ、知らない子ですね


> 漢数字の 二 ではなく、数字の2で問題ありませんでした。

半角の 2 ではなく全角の 2 ですね?
それならば StrConv を利用できます。一応 StrConv 版も掲載しておきます。


Private Sub 実行ボタン_Click(sender As Object, e As EventArgs) Handles 実行ボタン.Click
  Dim boxes As CheckBox() = {CheckBox1, CheckBox2, CheckBox3}
  Dim count As Integer = boxes.Count(Function(c) c.Checked)
  'Dim msg As String = CStr(count) & "つチェックしました。"
  Dim msg As String = StrConv(CStr(count), vbWide, &H411) & "つチェックしました。"
  Select Case count
    Case 0
      Array.ForEach(boxes, Sub(c) c.Checked = True)
      MsgBox("チェックされた", vbInformation)
    Case boxes.Length
      Array.ForEach(boxes, Sub(c) c.Checked = False)
      MsgBox("解除された", vbInformation)
    Case Else
      MsgBox(msg, vbInformation)
  End Select
End Sub


この場合、CheckBox の数が変更されたとしても同じロジックを使うことができますが、
数が 10 以上になる場合、日本語として「10つ」という言い方はしないため、
メッセージを工夫する必要があるでしょう。


『どれもチェックされていない時』と、『すべてチェックされていない時』だけ
ForEach にてチェック反転のコードを記述すると共に、
メッセージ内容を、個数表示ではなく全チェック/全解除の通知に変更しています。
適宜調整してみてください。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -