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

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

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

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

WPF

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

Q&A

解決済

3回答

10005閲覧

C# WPF あるボタンが押された事を条件にして、他のボタンも押される(true)にする方法

---stax---

総合スコア148

C#

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

WPF

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

0グッド

0クリップ

投稿2017/10/04 14:04

編集2017/10/04 14:28

表題の件で質問させてください
現在WPFの画面上に

〇ALL(ラジオボタン)  □ONE(チェックボタン)□TWO(チェックボタン)

というように配置しています
ALLが押されるとONE,TWOのチェックが入るようには出来たのですが、
ALLが選択されていない状態でONE,TWOが押されるとALLにもチェックさせたいです
また、ALLが選択されている状態でONE,TWOのいずれかのチェックが外れるとALLも解除させれるようにしたいです

各チェックボタンが押された際のイベントに設定するかと考えました
例:one_Checkedというイベントの際にtwo_Checkedを確認し、trueならばAllをtrueにさせる

しかしifの条件に
if(one.IsChecked = true;)
というような記述は出来ずどういう風に条件を指定すればいいのか悩んでいます
このような場合、どのようにすれば良いでしょうか

ifを使わなくても出来るのでしょうか?
分かりにくい質問で申し訳ありませんがアドバイスよろしくお願いいたします。

C#

1public MainWindow() 2 { 3 InitializeComponent(); 4 } 5 6 private void All_Checked(object sender, RoutedEventArgs e) 7 { 8 one.IsChecked = true; 9 two.IsChecked = true; 10 } 11 12 private void one_Checked(object sender, RoutedEventArgs e) 13 { 14 //この部分が分かりません 15 } 16 17 private void two_Checked_1(object sender, RoutedEventArgs e) 18 { 19      //この部分が分かりません 20 } 21 }

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

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

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

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

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

guest

回答3

0

ベストアンサー

なぜAllにラジオボタンを用いているのかわかりませんが、以下でどうでしょう?

XAMLL

1<StackPanel Orientation="Horizontal"> 2  <RadioButton Name="All" Content="All" Checked="AllCheckChanged" Unchecked="AllCheckChanged" /> 3  <CheckBox Name="One" Content="One" Checked="CheckChanged" Unchecked="CheckChanged"/> 4 <CheckBox Name="Two" Content="Two" Checked="CheckChanged" Unchecked="CheckChanged"/> 5</StackPanel> 6``` 7 8```C# 9/// <summary> 10/// OneまたはTwoチェック状態が変更された 11/// </summary> 12/// <param name="sender"></param> 13/// <param name="e"></param> 14private void CheckChanged(object sender, RoutedEventArgs e) 15{ 16 this.All.IsChecked =( this.One.IsChecked ?? false) && ( this.Two.IsChecked ?? false); 17} 18 19/// <summary> 20/// Allのチェック状態が変更された 21/// </summary> 22/// <param name="sender"></param> 23/// <param name="e"></param> 24private void AllCheckChanged(object sender, RoutedEventArgs e) 25{ 26 if(this.All.IsChecked ?? false) 27 { 28 this.One.IsChecked = true; 29 this.Two.IsChecked = true; 30 } 31} 32```

投稿2017/10/05 00:56

ebiryo

総合スコア797

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

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

---stax---

2017/10/05 05:43

回答ありがとうございます お恥ずかしいのですが、CheckChangedイベントの作り方が分からないので調べてからコードを試してみます 丁寧に教えていただきありがとうございます
---stax---

2017/10/05 05:58

XAMLでUnCheckedと記述するとイベントが作られるのですね ありがとうございます
---stax---

2017/10/05 06:01

何度もすいません <CheckBox Name="One" Content="One" Checked="CheckChanged" Unchecked="CheckChanged"/> <CheckBox Name="Two" Content="Two" Checked="CheckChanged" Unchecked="CheckChanged"/> とありますが、One、Twoで同じCheckChangedを使用しています これはイベントも2つのボタンで共通化できるという意味でしょうか?
ebiryo

2017/10/05 06:18

そうです。 第一引数の型がobject、第二引数の型がRoutedEventArgsのメソッドなら何でも構いません。 試しに  private void Test(object sender, RoutedEventArgs e)  { } のようなメソッドを先に作ってからXAML上でUnCheckedと記述して見てください。 選択肢としてTestが表示されると思います。 One,Twoのチェック状況に変更があっとことを知りたいわけですから、共通化したほうがすっきりしますよね?
---stax---

2017/10/05 06:48

ありがとうございます 選択肢に表示されました 非常にコンパクトに出来てとても見やすいです 重ねて質問なのですが、 private void AllCheckChanged(object sender, RoutedEventArgs e) { if(this.All.IsChecked ?? false) { this.One.IsChecked = true; this.Two.IsChecked = true; } } のifの条件式はなぜtrueではなくfalseなのでしょうか? Allボタンが押されたときにAllShift.IsCheckedにはtrueがすでに代入されているのではないでしょうか? 理解が浅いためわけのわからない質問ですいません
ebiryo

2017/10/05 06:59

「ifの条件式はなぜtrueではなくfalse」とはどういう意味でしょうか? if(this.All.IsChecked ?? false)  これは if( (this.All.IsChecked ?? false) == true ) と同じこと、つまりAllがチェックされていたら、という意味ですよ。 実際に動作させ、ブレークポイントを設定し、IsChecked 等の中身を確認してみるこお勧めします。
ozwk

2017/10/05 06:59

x ?? y は xとyを比較しているんじゃなくて xがnullじゃなかったらx nullだったらy です
---stax---

2017/10/05 07:49

ありがとうございます null許容型調べてみました またブレークも入れて確認したところtrueになっていました ありがとうございます!
guest

0

チェックされた時に発生するイベントがChecked、チェックが外された時に発生するイベントがUncheckedになります。ちなみに押された時に発生するイベントはClickになります。

例えば、以下のようにUncheckedイベントを追加することで実現可能です。

C#

1 private void one_Checked(object sender, RoutedEventArgs e) 2 { 3 UpdateRadioButton(); 4 } 5 6 private void one_Unchecked(object sender, RoutedEventArgs e) 7 { 8 UpdateRadioButton(); 9 } 10 11 private void two_Checked(object sender, RoutedEventArgs e) 12 { 13 UpdateRadioButton(); 14 } 15 16 private void two_Unchecked(object sender, RoutedEventArgs e) 17 { 18 UpdateRadioButton(); 19 } 20 21 private void UpdateRadioButton() 22 { 23 All.IsChecked = one.IsChecked == true && two.IsChecked == true; 24 }

投稿2017/10/04 15:59

neelabo

総合スコア60

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

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

---stax---

2017/10/05 05:44

回答ありがとうございます お恥ずかしいのですが、CheckChangedやUnCheckedのイベントの作り方が分からないので調べてからコードを試してみます 丁寧に教えていただきありがとうございます
---stax---

2017/10/05 05:58

XAMLでUnCheckedと記述するとイベントが作られるのですね ありがとうございます
guest

0

しかしifの条件に
if(one.IsChecked = true;)
というような記述は出来ずどういう風に条件を指定すればいいのか悩んでいます

についてですが、チェックボックスであるone.IsCheckedプロパティの型は、Null許容bool?型と言ってtrue, false, nullの3つの値がありえます。
nullだと初期化されていないようなものなのでそのままだとif文で判定できません。

bool? から bool に安全にキャストする (C# プログラミング ガイド)

なので、上記のガイドを参考に、

C#

1// 既定値をfalse(OFF)とする。 2bool checked = false; 3if (one.IsChecked.HasValue) { 4 checked = one.IsChecked; 5} 6 7if (checked) { 8 // oneがチェック済みの時の処理 9}

のようにして別に用意したbool型の変数に入れて使うと良いかと思います。
そのようにしてALL, ONE, TWOをそれぞれON/OFFしてはいかがでしょうか。

別の話になりますが、ALLが「ラジオボタン」になっていますが、一般的にはラジオボタンは複数並べ、相互に排他的であるような選択をする場合に使われます。
(例:色の選択で、赤、青、黄色のいずれか、等)

ですが、ラジオボタンのON/OFF表示が使いたいということかもしれませんので、大きなお世話かとも思い、この辺で止めておきます。

投稿2017/10/04 15:38

編集2017/10/04 15:52
dodox86

総合スコア9183

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

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

---stax---

2017/10/05 05:51

回答ありがとうございます 変数を使うとコードも短くなっていいですね HasValueなど始めて見るものが多いので調べ見ます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問