본문으로 바로가기
반응형

체크박스

 설문조사 같이 항목을 표시하고 체크할 때 사용하는 컨트롤이 체크박스이다. 이때 여러개의 항목을 선택할 수 있고 한개만 선택하게 할 수 있다. 여러개의 항목을 선택할때 체크박스를 사용하고, 한 개의 항목을 선택할 라디오버튼을 사용한다. 체크박스와 라디오버튼 모두 Checked 속성을 가지고 있으며, 선택되면 CheckedChanged이벤트가 발생한다.

label 1개, CheckBox 5개, Button 1개로 만들어주고, 각각 텍스트를 바꿔준다

using System;
using System.Windows.Forms;
namespace _20200819_005
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string checkStates = "";
            CheckBox[] cBox
                = { checkBox1, checkBox2, checkBox3, checkBox4, checkBox5 };
            
            foreach(var item in cBox) // 5개 체크박스의 Checked상태 출력
            {
                checkStates += string.Format("{0} : {1}\n", item.Text, item.Checked);
                //Console.Write("{0} : {1}\n", item.Text, item.Checked);
            }
            MessageBox.Show(checkStates, "checkStates");

            string summary = string.Format("좋아하는 과일은 : "); // 좋아하는 과일 표시하기위한 문자열 변수 Summary
            foreach (var item in cBox) // cBox 배열의 Checked속성을 감지하여 true인것만 summary에 추가하고 메시지박스에 summary 문자열 출력
            // var 타입은 그때그때마다 다르다
            {
                if (item.Checked == true)
                    summary += item.Text + " ";
            }
            MessageBox.Show(summary, "summary");
        }
    }
}

실행화면

 

좋아하는 과일을 체크박스에 체크하고 제출 버튼을 클릭하면 checkStates 창이 새로 뜨면서 체크박스에 과일을 체크했는지 안했는지 출력되고, checkStates창을 닫으면 summary창이 뜨면서 체크한 과일들이 출력된다.

 

 

 

 

 

라디오버튼과 그룹박스

 성별, 국적처럼 여러 개의 항목 중에서 한 개의 항목만을 선택하게 할 때 라디오버튼을 사용한다. 라디오 버튼은 일반적으로 그룹박스와 함께 사용되며 그룹박스 안의 라디오버튼은 하나만 체크될 수 있다. 체크박스와 마찬가지로 Checked 속성이 있으며, 체크되면 CheckedChanged 이벤트를 발생한다.

 

 디자인 창에서 국적을 표시하는 4개의 라디오버튼 이름을 각각 rbKorea, rbChina, rbCanada, rbOthers로 바꾸고 성별 그룹의 라디오 버튼은 rbMale, 여성은 rbFemale로 이름을 바꿔주자.

이미지에 맞게 Text를 바꿔주고, 버튼도 하나 추가해주자

 

using System;
using System.Windows.Forms;
namespace _20200819_006
{
    public partial class Form1 : Form
    {
        private RadioButton checkedRB;
        private string gender;
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string result = "";
            string result = "국적 : ";
            if (rbKorea.Checked)  // 대한민국이 체크됬을때
               result += "국적 : 대한민국\n";
            else if (rbChina.Checked)  // 중국이 체크됬을때
               result += "국적 : 중국\n";
            else if (rbCanada.Checked)  // 캐나다가 체크됬을때
               result += "국적 : 캐나다\n";
            else if (rbOthers.Checked)  // 그 외에 가 체크됬을때 
                result += "국적 : 그 외의 국가\n";

            if (checkedRB == rbMale)
                result += "성별 : 남성";
            else if (checkedRB == rbFemale)
                result += "성별 : 여성";

            MessageBox.Show(result, "결과");
        }
        private void rbMale_CheckedChanged(object sender, EventArgs e)
        {
            checkedRB = rbMale;
        }
        private void rbFemale_CheckedChanged(object sender, EventArgs e)
        {
            checkedRB = rbFemale;
        }
    }
}

 

 

만약 라디오버튼이 50개면 엄청난 하드코딩이되므로 묶어서 조금 더 간단하게 코드를 짜볼 수도 있다.

using System;
using System.Windows.Forms;
namespace _20200819_006
{
    public partial class Form1 : Form
    {
        //private RadioButton checkedRB;
        private string gender;
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string result = "국적 : ";
            
            for(var Count = 0; Count < groupBox1.Controls.Count; ++Count)        // Controls.Count로 배열처럼 요소 수를 가져올 수 있다.
            {
                // Controls는 그룹박스 내부 전부다를 뜻함
                RadioButton Temp = (RadioButton)groupBox1.Controls[Count]; // 그룹박스와 라디오 버튼을 형변환으로 일치시켜준다.
                if (Temp.Checked)   // 라디오버튼이 체크되면 발동하는 if문
                {
                    result += Temp.Text;  // 결과에 Temp가 가지고있는 Text값을 대입해준다.
                    break;  // 체크됬으니까 for문 종료
                }
            }
            
            result += "\n성별 : " + gender;
            MessageBox.Show(result);
            
        }
        private void rbMale_CheckedChanged(object sender, EventArgs e)
        {
            gender = "남성";
        }
        private void rbFemale_CheckedChanged(object sender, EventArgs e)
        {
            gender = "여성";
        }
    }
}

실행 화면

 

반응형