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

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

ただいまの
回答率

91.02%

  • C#

    5760questions

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

  • WPF

    605questions

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

C# WPF あるチェックボックス(A)が押されている状態で他の複数あるチェックボックス(B~D)のいずれか一つを外せば(A)が解除される

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 528

---stax---

score 48

表題の件で質問お願いします
現在画面上に
□全直 □1直 □2直 □3直
というチェックボックスが配置されています 

①全直を押せば1,2,3直すべてがtrueになり
②1,2,3直すべて押せば全直がtrue
③全直が押されている状態で1,2,3直のいずれか一つを外せば全直が解除される
④1,2,3直すべてのチェックは外せない(最後に外そうとしたチェックボックスの切り替えはできなくする) 

現在③の部分が満たせておりません

private void UnCheckChanged(object sender, RoutedEventArgs e)
        {
            if ((this.First.IsChecked == false) && (this.Second.IsChecked == false) && (this.Third.IsChecked == false))
            {
                CheckBox cb = sender as CheckBox;
                cb.IsChecked = true;

            }
            this.All.IsChecked = false;

        }

上記のイベントで
this.All.IsChecked = false;
を行うと

private void AllUnChecked(object sender, RoutedEventArgs e)
        {

            {
                this.First.IsChecked = false;
                this.Second.IsChecked = false;
                this.Third.IsChecked = false;
            }
        }

のイベントが発生し自分で選択した以外のほかの直も消えてしまいます
この状態を回避するにはどう対応すればよいでしょうか

以下全コード

 private void AllChecked(object sender, RoutedEventArgs e)
        {

            {
                this.First.IsChecked = true;
                this.Second.IsChecked = true;
                this.Third.IsChecked = true;
            }
        }

        private void AllUnChecked(object sender, RoutedEventArgs e)
        {

            {
                this.First.IsChecked = false;
                this.Second.IsChecked = false;
                this.Third.IsChecked = false;
            }
        }

        //First,Second,Thirdの状態が変化した
        private void CheckChanged(object sender, RoutedEventArgs e)
        {
            if((this.First.IsChecked == true) && (this.Second.IsChecked == true) && (this.Third.IsChecked == true))
            {
                this.All.IsChecked = true;

            }

        }

        private void UnCheckChanged(object sender, RoutedEventArgs e)
        {
            if ((this.First.IsChecked == false) && (this.Second.IsChecked == false) && (this.Third.IsChecked == false))
            {
                CheckBox cb = sender as CheckBox;
                cb.IsChecked = true;

            }
            this.All.IsChecked = false;

        }
    }
<Grid Margin="0,0,-8,-3">

<CheckBox x:Name="First" Content="1直" HorizontalAlignment="Left" Margin="749,105,0,0" VerticalAlignment="Top" Checked="CheckChanged" Unchecked="UnCheckChanged"/>
        <CheckBox x:Name="Second" Content="2直" HorizontalAlignment="Left" Margin="809,105,0,0" VerticalAlignment="Top" Checked="CheckChanged" Unchecked="UnCheckChanged"/>
        <CheckBox x:Name="Third" Content="3直" HorizontalAlignment="Left" Margin="873,105,0,0" VerticalAlignment="Top" Checked="CheckChanged" Unchecked="UnCheckChanged"/>
        <CheckBox x:Name="All" Content="全直" HorizontalAlignment="Left" Margin="630,104,0,0" VerticalAlignment="Top" Checked="AllChecked" Unchecked="AllUnChecked"/>
        <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="23,159,0,0" VerticalAlignment="Top" Height="537" Width="966"/>




    </Grid>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • lain

    2017/10/06 16:43

    全直、123直すべてにチェックが付いている状態の時に、全直のチェックを外したら、123のチェック状態はどうするのですか?

    キャンセル

  • ---stax---

    2017/10/07 08:21

    分かりにくくてすいません。ご指摘の内容ですと、本来1,2,3直共チェックは残すのが普通だと思うのですが、現在私の作った物では全直のチェックが外れた時点で1,2直が解除され、3直はチェックが残ります。仕様④を満たそうとして現在の状態になっています。

    キャンセル

回答 5

+4

回答ではありません。
仕様に絡むことなので何とも言えませんが、通常この手の動きは

1,2,3全てON
⇒全はON

1,2,3全てOFF
⇒全はOFF

1,2,3はONとOFFが混在
⇒全はnull

が一般的だと思うのですが、いかがでしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/07 08:26

    ありがとうございます。
    trueかfalseでしか記述していないから自分でも分かりにくくなっているのかもしれません。
    nullという状態を設けると条件判定もしやすくなる気がするので、もう少し回答頂いた内容を噛み砕いてみます。
    ありがとうございます。

    キャンセル

+3

仕様に違和感を感じたため、ebiryoさんに一票なのですが、自分が感じた違和感について少しコメントしてみます。

以下は全直を3ステートではなく2ステートのチェックボックスとした場合の話です。

「全直」を選択状態にすると「1~3」全てを選択状態にするという点はいいのですが、では「全直」を選択解除するとどう振る舞うべきでしょう?現状では「1~3」全てを解除としています。しかしこれは(4)の仕様と不整合であると思います。

UIの仕様の考え方の一つとして、初期状態が不当状態(何も選択されてない状態)であっても、一旦正当な状態に変化させた後は「不当状態に遷移できないようにする」というポリシーがあると思います。(4)はこのポリシーにそった考え方だと思いますが、「全直」解除時の動作はこのポリシーに従っていません。それなら「全直」解除時には「なにもしない」のがいいかというと、そうするなら「チェックボックス」である意味合いが薄れるのでいっそ「全選択」といった単なるボタンの方がよいという話になってくる気がします。

個人的には不当状態を許容しないか(ただし初期状態だけ不当を許容する場合もある)、あるいは不当状態も許容するかのどちらかに操作ポリシーを統一しておいた方がよいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/07 08:32

    回答ありがとうございます。
    仕様通りに形にする事だけ考えていたのでご指摘頂いた内容への理解が浅かったです。
    確かに、内容的にも全選択という方が良い気がします。
    現状は統一感も何もないので個人的にややこしくなっている部分もあると思うのでもう少し構想を確実にして作成していきます。
    ありがとうございます。

    キャンセル

checkベストアンサー

+1

折角WPF使っているのでデータバインドしたほうがいいと思う
あと、https://teratail.com/questions/95244の方は放置になるのかな?

namespaceをWpfApp3になっているけど、その辺は読み替えで対応お願い

MainWindowViewModelクラスを別ファイルで作成
大雑把に書くと、1~3のチェックボックスのON/OFFを保持するプライベートフィールドを用意
1~3のプロパティはgetではフィールドをそのまま返すだけ
setではほかの二つとvalueで全部外れるようならフィールドの値を変更しない
(わかりやすさのためにメッセージの出力を行ってるけど不要なら削除でおk)
全直はgetでは1~3が全部ONならtrueを、一つでもOFFならfalseを返すことで個別のフィールドは持ってない
setは1~3をすべてONに変更するだけ

OnPropertyChangedはnameofで囲んだプロパティの変更イベントを発行することで画面へ取得しなおすようにしてる

あとは画面(XAML)でバインドしてるだけ
XAMLのコードビハインドは一切手を入れてない
なれるとデータバインドでprivateフィールドで状態を保持して、publicプロパティのsetterで変更を管理してgetterで良い感じに取得するようにした方が楽だと思う

ViewModel(MainWindowViewModel.cs)

using System;
using System.ComponentModel;
using System.Threading;
using System.Threading.Tasks;

namespace WpfApp3
{
    public class MainWindowViewModel: INotifyPropertyChanged
    {
        private Boolean 直1 = true;
        private Boolean 直2 = false;
        private Boolean 直3 = false;

        private String msg = String.Empty;

        public Boolean1
        {
            get
            {
                return this.直1;
            }
            set
            {
                if (value || this.直2 || this.直3)
                {
                    this.直1 = value;
                    OnPropertyChanged(nameof(直1));
                    OnPropertyChanged(nameof(全直));
                }
                else
                {
                    this.SetMessage("チェックは全部解除できません");
                }
            }
        }

        public Boolean2
        {
            get
            {
                return this.直2;
            }
            set
            {
                if (this.直1 || value || this.直3)
                {
                    this.直2 = value;
                    OnPropertyChanged(nameof(直2));
                    OnPropertyChanged(nameof(全直));
                }
                else
                {
                    this.SetMessage("チェックは全部解除できません");
                }
            }
        }

        public Boolean3
        {
            get
            {
                return this.直3;
            }
            set
            {
                if (this.直1 || this.直2 || value)
                {
                    this.直3 = value;
                    OnPropertyChanged(nameof(直3));
                    OnPropertyChanged(nameof(全直));
                }
                else
                {
                    this.SetMessage("チェックは全部解除できません");
                }
            }
        }

        public Boolean 全直
        {
            get
            {
                return this.直1 && this.直2 && this.直3;
            }
            set
            {
                if(this.直1 && this.直2 && this.直3)
                {
                    this.SetMessage("すでに全部チェック入ってます");
                    return;
                }
                this.直1 = true;
                this.直2 = true;
                this.直3 = true;
                OnPropertyChanged(nameof(直1));
                OnPropertyChanged(nameof(直2));
                OnPropertyChanged(nameof(直3));
                OnPropertyChanged(nameof(全直));
            }
        }

        public String Msg { get { return this.msg; } }

        private async void SetMessage(String Message)
        {
            msg = Message;
            OnPropertyChanged(nameof(Msg));

            await Task.Run(() => {
                Thread.Sleep(5000);
            });

            msg = String.Empty;
            OnPropertyChanged(nameof(Msg));
        }

        #region INotifyPropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        #endregion

    }
}

XAML(MainWindow.xaml)

<Window x:Class="WpfApp3.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:WpfApp3"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <local:MainWindowViewModel />
    </Window.DataContext>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30*"/>
        </Grid.RowDefinitions>

        <CheckBox IsChecked="{Binding Path=直1, Mode=TwoWay}" Content="1直" Grid.Row="0" />
        <CheckBox IsChecked="{Binding Path=直2,Mode=TwoWay}" Content="2直" Grid.Row="1" />
        <CheckBox IsChecked="{Binding Path=直3,Mode=TwoWay}" Content="3直" Grid.Row="2" />
        <CheckBox IsChecked="{Binding Path=全直,Mode=TwoWay}" Content="全直" Grid.Row="3" />

        <TextBlock Text="{Binding Path=Msg}" Grid.Row="4" />

    </Grid>
</Window>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/07 08:37

    ありがとうございます。
    バインドを用いた簡単なサンプルは試してみたのですが、実際どういう場面で使えば良いのか全然理解出来ておらず使う事が出来ていませんでした。
    頂いたコードは非常に見やすく時間はかかりますが私でも読み取れそうです。
    回答を参考にして頂いたコードを試して勉強させて頂きます。
    丁寧にありがとうございます。

    キャンセル

+1

回答ではありません。

同様の質問を他にも投稿されてます。
しかもここ数日そういう行為を何度か。

答える方もどっちに答えていいか、わからなくなるし、
あとから見る人(同じような疑問を持たれたかた)にも
わかりにくいことではないでしょうか?

そういう行為やめませんか?
質問はあとから編集できることでもありますから。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/07 08:11

    ご指摘ありがとうございます。
    取り組んでいる私からすればひとつひとつ違った内容のつもりでしたが、他の人から見ると同じように見えますね。
    なかなか理解が進まない中で時間だけが過ぎて行く不安から投稿頻度も多くなっていましたが今後は内容を見極め活用させて頂きます。
    ご指摘ありがとうございます。

    キャンセル

0

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;
using System.ComponentModel;
using Npgsql;
using System.Data;
using System.Web;
using System.Collections.ObjectModel;
namespace AllStationCounter
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {



        public MainWindow()
        {

            DataTable tb = new DataTable();
            //DataTableのインスタンスtbにnameという名前の列を定義

            tb.Columns.Add("name");
            //DataTableのインスタンスtbにnameという列を挿入

            InitializeComponent();
            var connString = "Server=cpedev27;Port=5432;User Id=test_user;Password=test_user;Database=test_server;";
            var conn = new NpgsqlConnection(connString);
            conn.Open();





            var command = new NpgsqlCommand("select name from lesson2.person", conn);
            var dataReader = command.ExecuteReader();


            var row1 = tb.NewRow();
            //DataTableのインスタンスtbにrow1という行を定義(tbにはname列がある)

            row1["name"] = "全サブライン";
            //tbのname列のrow1(name)行のセルに全サブラインを定義

            tb.Rows.Add(row1);
            //tbのname列のrow1(name)行のセルに全サブラインを挿入(1.1)

            while (dataReader.Read())
            {

                var row = tb.NewRow();
                //DataTableのインスタンスtbにrowという行を定義(1.2)

                for (int i = 0; i < dataReader.FieldCount; i++)

                {
                    row["name"] = dataReader["name"];
                    // dataReader["name"]はDBからとってくるデータの為名前は欲しい列と一致させる
                }

                tb.Rows.Add(row);

            }

            combo.ItemsSource = tb.DefaultView;
            combo.DisplayMemberPath = "name";
            combo.SelectedValuePath = "name";

        }




        //全直ボタン操作
        private void AllChecked(object sender, RoutedEventArgs e)
        {

            {
                this.First.IsChecked = true;
                this.Second.IsChecked = true;
                this.Third.IsChecked = true;
            }
        }

        private void AllUnChecked(object sender, RoutedEventArgs e)
        {
            //
            if (!m_isAutoOff)
            {
                this.First.IsChecked = false;
                this.Second.IsChecked = false;
                this.Third.IsChecked = false;
            }
        }

        //First,Second,Thirdの状態が変化した
        private void CheckChanged(object sender, RoutedEventArgs e)
        {
            if((this.First.IsChecked == true) && (this.Second.IsChecked == true) && (this.Third.IsChecked == true))
            {
                this.All.IsChecked = true;

            }

        }

        private bool m_isAutoOff =false;
        private void UnCheckChanged(object sender, RoutedEventArgs e)
        {


            if ((this.First.IsChecked == false) && (this.Second.IsChecked == false) && (this.Third.IsChecked == false))
            {
                CheckBox cb = sender as CheckBox;
                cb.IsChecked = true;

            }
            m_isAutoOff = true;
            this.All.IsChecked = false;
            //↑この処理が終わった瞬間にAllUnCheckedイベントに行くためm_isAutoOff = true;(falseのため未実行になる)を使いイベントを走らせないようにする
            m_isAutoOff = false;
        }



    }
}
Window x:Class="AllStationCounter.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:AllStationCounter"
        mc:Ignorable="d"
        Title="MainWindow" Height="746.799" Width="1016.523">
    <Grid Margin="0,0,-8,-3">

        <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="50" Margin="23,152,0,0" VerticalAlignment="Top" Width="577"/>
        <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="47" Margin="616,90,0,0" VerticalAlignment="Top" Width="373"/>
        <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="47" Margin="23,90,0,0" VerticalAlignment="Top" Width="577"/>
        <ComboBox ItemsSource= "{Binding subline}" x:Name="combo" HorizontalAlignment="Left" Margin="103,34,0,0" VerticalAlignment="Top" Width="193" Height="28"/>
        <Label x:Name="label" Content="サブライン" HorizontalAlignment="Left" Margin="23,34,0,0" VerticalAlignment="Top" Width="100"/>
        <Label x:Name="label1" Content="検索期間単位" HorizontalAlignment="Left" Margin="23,100,0,0" VerticalAlignment="Top" Width="100"/>
        <!--Group1-->
        <RadioButton x:Name="Productiondate" Content="生産日" HorizontalAlignment="Left" Margin="128,105,0,0" VerticalAlignment="Top" GroupName="Group1"/>
        <RadioButton x:Name="Timeofoccurrence" Content="発生時間" HorizontalAlignment="Left" Margin="198,105,0,0" VerticalAlignment="Top" GroupName="Group1"/>

        <DatePicker  DisplayDateStart="1900/01/01" DisplayDateEnd="3000/01/01" SelectedDateFormat="Short"  HorizontalAlignment="Left" Margin="283,100,0,0" VerticalAlignment="Top" Width="138" Height="28" />
        <DatePicker DisplayDateStart="1900/01/01" DisplayDateEnd="3000/01/01" SelectedDateFormat="Short" HorizontalAlignment="Left" Margin="439,100,0,0" VerticalAlignment="Top" Width="138" Height="28"/>
        <CheckBox x:Name="First" Content="1直" HorizontalAlignment="Left" Margin="749,105,0,0" VerticalAlignment="Top" Checked="CheckChanged" Unchecked="UnCheckChanged"/>
        <CheckBox x:Name="Second" Content="2直" HorizontalAlignment="Left" Margin="809,105,0,0" VerticalAlignment="Top" Checked="CheckChanged" Unchecked="UnCheckChanged"/>
        <CheckBox x:Name="Third" Content="3直" HorizontalAlignment="Left" Margin="873,105,0,0" VerticalAlignment="Top" Checked="CheckChanged" Unchecked="UnCheckChanged"/>
        <CheckBox x:Name="All" Content="全直" HorizontalAlignment="Left" Margin="630,104,0,0" VerticalAlignment="Top" Checked="AllChecked" Unchecked="AllUnChecked"/>
        <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="23,224,0,0" VerticalAlignment="Top" Height="472" Width="966"/>
        <Label x:Name="Countunit" Content="集計単位" HorizontalAlignment="Left" Margin="23,162,0,0" VerticalAlignment="Top" Width="87"/>

        <!--Group2-->
        <RadioButton x:Name="radioButton2" Content="生産日" HorizontalAlignment="Left" Margin="128,167,0,0" VerticalAlignment="Top" GroupName="Group2"/>
        <RadioButton x:Name="radioButton3" Content="生産直" HorizontalAlignment="Left" Margin="198,167,0,0" VerticalAlignment="Top" GroupName="Group2"/>
        <RadioButton x:Name="radioButton4" Content="時間" HorizontalAlignment="Left" Margin="283,167,0,0" VerticalAlignment="Top" GroupName="Group2"/>

        <Button x:Name="button" Content="検索" HorizontalAlignment="Left" Margin="616,152,0,0" VerticalAlignment="Top" Width="373" Height="50"/>




    </Grid>
</Window>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 91.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    5760questions

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

  • WPF

    605questions

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

  • トップ
  • C#に関する質問
  • C# WPF あるチェックボックス(A)が押されている状態で他の複数あるチェックボックス(B~D)のいずれか一つを外せば(A)が解除される