none
checkBox的勾選問題 RRS feed

  • 問題

  • 當我勾選超過6個checkBox時,會超出勾選範圍,當我再把剛勾選的6個checkBox選一個不勾選,但他的計數值還是一直加。要怎麼寫出

    把勾選時計數值增加,而取消勾選時計數值減少的程式碼。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace 樂透
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {

            }

            private void checkBox1_CheckedChanged(object sender, EventArgs e)
            {

            }

            private void checkBox7_CheckedChanged(object sender, EventArgs e)
            {

            }

            private void tabPage1_Click(object sender, EventArgs e)
            {

            }

            private void Form1_Load(object sender, EventArgs e)
            {         
                checkBox1.CheckedChanged+=checkBox_CheckedChanged;
                checkBox2.CheckedChanged+=checkBox_CheckedChanged;
                checkBox3.CheckedChanged += checkBox_CheckedChanged;
                checkBox4.CheckedChanged += checkBox_CheckedChanged;
                checkBox5.CheckedChanged += checkBox_CheckedChanged;
                checkBox6.CheckedChanged += checkBox_CheckedChanged;
                checkBox7.CheckedChanged += checkBox_CheckedChanged;
                checkBox8.CheckedChanged += checkBox_CheckedChanged;
                checkBox9.CheckedChanged += checkBox_CheckedChanged;
                checkBox10.CheckedChanged += checkBox_CheckedChanged;
                checkBox11.CheckedChanged += checkBox_CheckedChanged;
                checkBox12.CheckedChanged += checkBox_CheckedChanged;
                checkBox13.CheckedChanged += checkBox_CheckedChanged;
                checkBox14.CheckedChanged += checkBox_CheckedChanged;
                checkBox15.CheckedChanged += checkBox_CheckedChanged;
                checkBox16.CheckedChanged += checkBox_CheckedChanged;
                checkBox17.CheckedChanged += checkBox_CheckedChanged;
                checkBox18.CheckedChanged += checkBox_CheckedChanged;
                checkBox19.CheckedChanged += checkBox_CheckedChanged;
                checkBox20.CheckedChanged += checkBox_CheckedChanged;
                checkBox21.CheckedChanged += checkBox_CheckedChanged;
                checkBox22.CheckedChanged += checkBox_CheckedChanged;
                checkBox23.CheckedChanged += checkBox_CheckedChanged;
                checkBox24.CheckedChanged += checkBox_CheckedChanged;
                checkBox25.CheckedChanged += checkBox_CheckedChanged;
                checkBox26.CheckedChanged += checkBox_CheckedChanged;
                checkBox27.CheckedChanged += checkBox_CheckedChanged;
                checkBox28.CheckedChanged += checkBox_CheckedChanged;
                checkBox29.CheckedChanged += checkBox_CheckedChanged;
                checkBox30.CheckedChanged += checkBox_CheckedChanged;
                checkBox31.CheckedChanged += checkBox_CheckedChanged;
                checkBox32.CheckedChanged += checkBox_CheckedChanged;
                checkBox33.CheckedChanged += checkBox_CheckedChanged;
                checkBox34.CheckedChanged += checkBox_CheckedChanged;
                checkBox35.CheckedChanged += checkBox_CheckedChanged;
                checkBox36.CheckedChanged += checkBox_CheckedChanged;
                checkBox37.CheckedChanged += checkBox_CheckedChanged;
                checkBox38.CheckedChanged += checkBox_CheckedChanged;
                checkBox39.CheckedChanged += checkBox_CheckedChanged;
                checkBox40.CheckedChanged += checkBox_CheckedChanged;
                checkBox41.CheckedChanged += checkBox_CheckedChanged;
                checkBox42.CheckedChanged += checkBox_CheckedChanged;
                checkBox43.CheckedChanged += checkBox_CheckedChanged;
                checkBox44.CheckedChanged += checkBox_CheckedChanged;
                checkBox45.CheckedChanged += checkBox_CheckedChanged;
                checkBox46.CheckedChanged += checkBox_CheckedChanged;
                checkBox47.CheckedChanged += checkBox_CheckedChanged;
                checkBox48.CheckedChanged += checkBox_CheckedChanged;
                checkBox49.CheckedChanged += checkBox_CheckedChanged;
                foreach (Control c in groupBox1.Controls)
                {
                    ((CheckBox)c).CheckedChanged += new EventHandler(checkBox_CheckedChanged);
                }
            }
             int x = 12;
            int a;
            void checkBox_CheckedChanged(object sender, EventArgs e)
            {             

                CheckBox c = sender as CheckBox;
                a += (c.Checked) ? 1 : 1;
                if (c.Checked && a > x)
                {
                    MessageBox.Show("超出勾選範圍!");
                    c.Checked = false;
                }                         
            }
        }
    }

               
    • 已編輯 肉_昇 2015年2月6日 下午 02:52
    2015年2月6日 下午 02:51

解答

所有回覆

  • 試試看將:

    a += (c.Checked) ? 1 : 1;

    改成:

    a += (c.Checked) ? 1 : -1;

    還有checkBox1~checkBox49是否有放在groupBox1中, 如果有的話, 好像登記處理事件做了兩次

    • 已標示為解答 albert.cc 2015年2月16日 上午 03:36
    2015年2月7日 上午 04:47
  • 對!我把49個放在groupBox1。

    不過還是有瑕疵,最多只能勾選6個checkBox,當我勾選超過6個,他會跳出 MessageBox.Show(超出勾選範圍!),我按下確定時,那個被我多勾選出來勾(也就是第7個勾)就不見了,可是我在勾選剛剛勾的第7個勾卻又可以,這樣總共勾選了7個checkBox,這樣會越勾越多。



    • 已編輯 肉_昇 2015年2月9日 上午 05:53
    2015年2月9日 上午 04:57
  • 如同 this大 講的你每個 checkbox 註冊了兩次 事件

    所以你的x = 12 理論上 應該是可以勾12個才對 而不是6個

    建議你可以用一個label 去測試 看現在多少了 去做調整

            private void Form1_Load(object sender, EventArgs e)
            {
            //    checkBox1.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox2.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox3.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox4.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox5.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox6.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox7.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox8.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox9.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox10.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox11.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox12.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox13.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox14.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox15.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox16.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox17.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox18.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox19.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox20.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox21.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox22.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox23.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox24.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox25.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox26.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox27.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox28.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox29.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox30.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox31.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox32.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox33.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox34.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox35.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox36.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox37.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox38.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox39.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox40.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox41.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox42.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox43.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox44.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox45.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox46.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox47.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox48.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox49.CheckedChanged += checkBox_CheckedChanged;
                label1.Text = "0";
                foreach (Control c in groupBox1.Controls)
                {
                    ((CheckBox)c).CheckedChanged += new EventHandler(checkBox_CheckedChanged);
                }
            }
    
            int x = 12;
            int a;
            
            void checkBox_CheckedChanged(object sender, EventArgs e)
            {
                CheckBox c = sender as CheckBox;
                
                a += (c.Checked) ? 1 : -1;
                if (c.Checked && a > x)
                {
                    c.Checked = false;
                    MessageBox.Show("超出勾選範圍!");
                    return;
                }
    
                label1.Text = a.ToString();
            }

    2015年2月9日 上午 06:12
  • 您這麼一長串的程式碼

           //    checkBox1.CheckedChanged += checkBox_CheckedChanged;
            //    checkBox2.CheckedChanged += checkBox_CheckedChanged;

    可以參閱我的範例,看看能否用一個迴圈來搞定?

    希望對您有幫助

    FileUpload控制項「批次上傳 / 多檔案同時上傳」的範例--以「流水號」產生「變數名稱」

    http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819.aspx


    我的書 與 ASP.NET教學網站 http://www.dotblogs.com.tw/mis2000lab/

    • 已標示為解答 albert.cc 2015年2月16日 上午 03:36
    2015年2月9日 上午 08:10
  • 我後來把checkBox1~checkBox49放在tabControl1,int x=12;改成int x=6;就可以了。
    • 已標示為解答 albert.cc 2015年2月16日 上午 03:36
    2015年2月9日 下午 01:28