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

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

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

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

Visual Studio

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

10861閲覧

複数のチェックボックスの状態を確認してボタンコントロールの有効無効を切り替えたい

samusaku

総合スコア34

C#

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

Visual Studio

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/11/05 11:36

###前提・実現したいこと
画面にCheckBoxを複数配置して
チェックボックス全てにチェックが入ったときのみ、
Buttonを有効にする、ということやりたいと考えています。

単純な実装はできたのですが(下に実装を記載しました)、
各チェックボックスのクリックイベント発生時に
同じチェック処理を実装することとなり、冗長な実装だと思っています。

これを1つの処理にする方法はありませんでしょうか?
(例えば、画面再描画(?)されるタイミングで行う方法など)

初心者レベルの質問で申し訳ありません。
よろしくお願いいたします。

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

<Window x:Class="TestAPP.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:TestAPP" mc:Ignorable="d" Title="MainWindow" Height="223.667" Width="239.333"> <Grid> <Button x:Name="Button1" Content="Button" HorizontalAlignment="Left" Margin="74,143,0,0" VerticalAlignment="Top" Width="74" Click="Button1_Click"/> <CheckBox x:Name="checkBox1" Content="CheckBox1" HorizontalAlignment="Left" Margin="74,28,0,0" VerticalAlignment="Top" Click="CheckBox1_Click"/> <CheckBox x:Name="checkBox2" Content="CheckBox2" HorizontalAlignment="Left" Margin="74,60,0,0" VerticalAlignment="Top" Click="CheckBox2_Click"/> <CheckBox x:Name="checkBox3" Content="CheckBox3" HorizontalAlignment="Left" Margin="74,98,0,0" VerticalAlignment="Top" Click="CheckBox3_Click"/> </Grid> </Window>

C#

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace TestAPP { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Button1.IsEnabled = false; } private void CheckBox1_Click(object sender, RoutedEventArgs e) { CheckButtonEnable(); // 冗長? } private void CheckBox2_Click(object sender, RoutedEventArgs e) { CheckButtonEnable(); // 冗長? } private void CheckBox3_Click(object sender, RoutedEventArgs e) { CheckButtonEnable(); // 冗長? } private void CheckButtonEnable() { if ((true == checkBox1.IsChecked) && (true == checkBox2.IsChecked) && (true == checkBox3.IsChecked)) { Button1.IsEnabled = true; } else { Button1.IsEnabled = false; } } private void Button1_Click(object sender, RoutedEventArgs e) { // ボタン有効時に行う実行処理 } } }

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

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

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

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

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

Tak1wa

2016/11/05 11:49

MVVMは使わない方向で考えていますか?使えるものであれば使っても構わないですか?
guest

回答2

0

ベストアンサー

MVVMパターンを考えずにコードビハインドで書くのを前提だとします。
各々のCheckBoxのクリックイベントで違う処理をしないのであれば、クリックイベントを一つにして使いまわしできます。

C#

1private void CheckBox1_Click(object sender, RoutedEventArgs e) 2{ 3 CheckButtonEnable(); 4}

だけ残し、

XAML側を下記のようにし、クリックイベントを使いまわします。(プロパティ部分は省略しました)

<CheckBox x:Name="checkBox1" Content="CheckBox1" Click="CheckBox1_Click"/> <CheckBox x:Name="checkBox2" Content="CheckBox2" Click="CheckBox1_Click"/> <CheckBox x:Name="checkBox3" Content="CheckBox3" Click="CheckBox1_Click"/>

CheckButtonEnable()メソッド内のif文も冗長な気がしますけど、?が無かったので割愛してます。

投稿2016/11/07 00:22

lain

総合スコア161

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

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

0

checkBox の IsChecked プロパティを、button の Enabled プロパティにバインドすれば簡単です。

投稿2016/11/05 14:20

mugicya

総合スコア1046

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

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

samusaku

2016/11/08 00:10

「バインド」で検索しましたらおっしゃる通り、そのやり方が載っていました。いろいろ調べて挑戦してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問