본문 바로가기

Programing (프로그래밍)/WPF & C# (C Sharp)

WPF & C# - Group CheckBox RadioButton ( Grouping / 그룹 체크박스 / 라디오버튼 / 전체선택 / SelectAll / CheckAll / 전체체크해제 )

728x90
반응형


 WPF & C# - Group CheckBox RadioButton ( Grouping / 그룹 체크박스 / 라디오버튼 / 전체선택 / SelectAll / CheckAll / 전체체크해제 )


GroupCheckBox+RadioButton.zip






MainWindow.xaml



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<StackPanel>
    <!-- Group CheckBox -->
    <StackPanel x:Name="stp" HorizontalAlignment="Left" VerticalAlignment="Top" Background="#FFE8E8E8" Margin="10">
        <TextBlock Text="Group CheckBox" FontWeight="Bold" TextAlignment="Center"  Height="20" Background="#FFC3C3C3" TextOptions.TextFormattingMode="Ideal"></TextBlock>
        <CheckBox Content="Check Box 01" Margin="5" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
        <CheckBox Content="Check Box 02" Margin="5" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
        <CheckBox Content="Check Box 03" Margin="5" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
        <CheckBox Content="Check Box 04" Margin="5" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
        <CheckBox Content="Check Box 05" Margin="5" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
        <Button x:Name="btn" Height="25" Content="Check All" FontWeight="Bold" Margin="5" Click="btn_Click"></Button>
        <Label x:Name="lbl" Margin="5" Background="White"></Label>
        <Label x:Name="lbl2" Margin="5" Background="White"></Label>
    </StackPanel>
 
    <!-- Group CheckBox ( RadioButton )-->
    <StackPanel x:Name="stp1" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Top" Background="#FFE8E8E8">
        <TextBlock Text="Group CheckBox ( RadioButton )" FontWeight="Bold" TextAlignment="Center"  Height="20" Background="#FFC3C3C3" TextOptions.TextFormattingMode="Ideal"></TextBlock>
        <CheckBox Content="Check Box 01" Margin="5" Click="CheckBox_Click"></CheckBox>
        <CheckBox Content="Check Box 02" Margin="5" Click="CheckBox_Click"></CheckBox>
        <CheckBox Content="Check Box 03" Margin="5" Click="CheckBox_Click"></CheckBox>
        <CheckBox Content="Check Box 04" Margin="5" Click="CheckBox_Click"></CheckBox>
        <CheckBox Content="Check Box 05" Margin="5" Click="CheckBox_Click"></CheckBox>
        <Label x:Name="lbl3" Margin="5" Background="White"></Label>
    </StackPanel>
</StackPanel>
cs



MainWindow.xaml.cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Group CheckBox
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    CheckBoxSelect();
}
 
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
    CheckBoxSelect();
}
 
void CheckBoxSelect()
{
    lbl.Content = "";
    lbl2.Content = "";
 
    // 조건에 맞는 객체 찾기
    foreach (CheckBox cbx in stp.Children.OfType<CheckBox>())
    {
        if (cbx.IsChecked == true) lbl.Content += cbx.Content.ToString();
    }
            
    // 조건에 맞는 객체를 배열에 넣기
    var chkBoxs = stp.Children.OfType<CheckBox>();
    CheckBox[] cbxs = new CheckBox[chkBoxs.Count()];
    for (int i = 0; i < cbxs.Count(); i++)
    {
        cbxs[i] = stp.Children.OfType<CheckBox>().ElementAtOrDefault(i);
        if (cbxs[i].IsChecked == true) lbl2.Content += cbxs[i].Content.ToString();
    }
}
 
// 전체 선택하기 또는 전체 선택 해제하기
private void btn_Click(object sender, RoutedEventArgs e)
{
    CheckAll();
}
 
void CheckAll()
{
    // 전체 CheckBox 숫자 와 IsChecked 가 true 인 숫자가 같다면
    if (stp.Children.OfType<CheckBox>().Count() == stp.Children.OfType<CheckBox>().LongCount(r => r.IsChecked == true))
    {
        // 전체 ChecoBox 체크해제
        foreach (CheckBox cbx in stp.Children.OfType<CheckBox>())
        {
            cbx.IsChecked = false;
        }
    }
    else
    {
        // 전체 ChecoBox 체크
        foreach (CheckBox cbx in stp.Children.OfType<CheckBox>())
        {
            cbx.IsChecked = true;
        }
    }
}
 
// Group CheckBox ( RadioButton )
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
    // 선택한 객체 IsChecked = true 로 변경하기
    CheckBox chk = sender as CheckBox;
    chk.IsChecked = true;
    lbl3.Content = chk.Content.ToString();
 
    // 조건에 맞는 객체 찾기 ( IsChecked = true 인것을 False로 변경 )
    CheckBox chkBox = stp1.Children.OfType<CheckBox>().FirstOrDefault(r => r.Equals(chk) == false && r.IsChecked == true);
    if (chkBox != null)   // 값이 있을때에만...
    {
        chkBox.IsChecked = false;
    }
}
cs





728x90
반응형