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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

4624閲覧

Windows Formsアプリ製作でCheckBoxとCheckedListBoxの連携の仕方で分からない事があります。よろしくお願いします。

masayoshi.m

総合スコア7

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2016/11/23 02:52

編集2016/11/23 05:23

###前提・実現したいこと
C#を使って勉強しています。
Windows Formsアプリケーション作っています。
開発環境は、

window8.1
Visual Studio community 2015 with updates
.NET Framework 2.0 Service Pack 2
.NET Framework 3.0 Service Pack 2
.NET Framework 3.5 Service Pack 1
.NET Framework 4.6
を使っています。

実行したいのは以下の事です。

一つのCheckBoxに複数項目のCheckedListBoxを連携させて

1:CheckedListBoxの項目すべてにチェックが付けば、CheckBoxにチェックする。
2:CheckedListBoxの全ての項目に印が付いている場合、一つでもチェックが外れれば、
CheckBoxのチェックを外す。

###発生している問題・エラーメッセージ
すべてのCheckedListBox項目にチェックが付いている状態で
どれか1つチェックを外すとCheckBoxのチェックは、外れるのですが
選択したCheckedListBoxのチェックが1回目のクリックでは外れません。
クリックを2回すると外れます。
ちなみに、このような状態になるのは、
全選択された内の1項目目の時だけであって2項目目からは、クリック1回で
チェックが外れます。

###該当のソースコード
以下が、書いたプログラムです。
// CheckedListBoxのイベントハンドラ
private void chklName_SelectedIndexChanged(object sender, EventArgs e)
{
//chklNameは、CheckedListBoxの項目
//chkCompanyは、CheckBoxの項目

if (chklName.CheckedItems.Count != chklName.Items.Count) { chkCompany.Checked = false; } else if(chklName.CheckedItems.Count == chklName.Items.Count) { chkCompany.Checked = true; }

よろしくお願いします!!

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/11/23 04:07

何を作っているのでしょう? CheckedListBox とあるから Windows Forms アプリ? あと、ご自分の開発環境(OS, ,NET, Visual Studio のバージョンなど)も書きましょう。
masayoshi.m

2016/11/23 05:24

ご指摘ありがとうございます。修正しました!
guest

回答2

0

ベストアンサー

お聞きした .NET のバージョンというのは Visual Studio で設定した「対象のフレームワーク」のことなんですが、それはあまり関係無さそうなので置いといて・・・

1:CheckedListBoxの項目すべてにチェックが付けば、CheckBoxにチェックする。
2:CheckedListBoxの全ての項目に印が付いている場合、一つでもチェックが外れれば、CheckBoxのチェックを外す。

CheckedListBox.ItemCheck イベントで操作してはいかがですか?

例えば以下の MSDN ライブラリにあるサンプルコードに、

CheckedListBox クラス
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.checkedlistbox(v=vs.90).aspx

checkBox1 という CheckBox を追加したとします。追加の仕方は分かりますよね?

サンプルコードの中に checkedListBox1_ItemCheck という CheckedListBox.ItemCheck イベントのハンドラが定義されていますが、それに以下のようなコードを追加すれば目的は果たせると思います。

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { if (e.NewValue == CheckState.Unchecked) { if (checkedListBox1.CheckedItems.Count == 1) { button2.Enabled = false; } } else { button2.Enabled = true; } // CheckBox の操作のため以下のコードを追加 if (e.NewValue == CheckState.Unchecked) { this.checkBox1.Checked = false; } else { if (this.checkedListBox1.Items.Count - this.checkedListBox1.CheckedItems.Count == 1) { this.checkBox1.Checked = true; } else { this.checkBox1.Checked = false; } } }

投稿2016/11/23 08:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

masayoshi.m

2016/11/23 16:05

こんなに賢い書き方があったんですね! 感動しました!ありがとうございます
guest

0

CheckedListBox規定の動作だと思いますが、違いますでしょうか?
以下のようにCheckOnClick=trueにすると希望の動作になりませんか?

C#

1public Form1() { 2 InitializeComponent(); 3 checkedListBox1.CheckOnClick = true; 4}

投稿2016/11/23 06:48

Hey_CH

総合スコア437

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

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

masayoshi.m

2016/11/23 16:06

ちがうところで苦戦してたみたいです。 回答ありがとうございました! 何かありましたらまたお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問