none
groupBox 裡面放 checkBox問題..? RRS feed

  • 問題


  • 請問我要把checkBox放到groupBox裡面,如果checkBox被使用者選取的話,
    label.text=checkBox.text;
    我的程式碼:

     private void Form1_Load(object sender, EventArgs e)
            {
                foreach (var obj in groupBox1.Controls)
                {
                    CheckBox cbx = (CheckBox)obj;
                    if (cbx.CheckState == CheckState.Checked)
                    {
                        label1.Text = cbx.Text;
                    }
                }
            }

    請問要如何修改?謝...
    2009年6月5日 上午 02:49

解答

  • Wang:
        我猜你的checkBox應該是複數的吧?蹂躪大指出一個重要的地方,其實用CheckedChanged事件處理更方便.
        以下的範例是利用程式碼將五個CheckBox的CheckedChanged事件併在一起.
       public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                int i;
              for ( i=1 ; i<=5 ; i++)
                {
                    Object myObj;
                    myObj = this.Controls.Find("checkBox" + System.Convert.ToString(i), true)[0];
                    ((CheckBox)myObj).CheckedChanged += new System.EventHandler(this.checkBox_CheckedChanged);
                }

            }

            private void checkBox_CheckedChanged(object sender, EventArgs e)
            {
                if (((CheckBox)sender).Checked == true)
                {
                    label1.Text = ((CheckBox)sender).Text;
                }
                else
                {
                    label1.Text = "";
                }
            
            }
        }

    • 已標示為解答 Wang40 2009年6月5日 上午 06:36
    2009年6月5日 上午 03:17
    版主

所有回覆

  • 不是在CheckBox.CheckedChanged事件內
    CheckBox cbx = (CheckBox)sender;
    if (cbx .Checked)
     label1.Text = cbx.Text;
    就好?!

    http://www.dotblogs.com.tw/larrynung/
    2009年6月5日 上午 02:58

  • 你試試看......

            private void cbx_CheckedChanged(object sender, EventArgs e)
            {
                foreach (Control obj in groupBox1.Controls)
                {
                    if (obj is CheckBox)
                    {
                        if (cbx.CheckState == CheckState.Checked)
                        {
                            label1.Text = cbx.Text;
                        }
                    }
                }
            }

    應該是寫在 checkbox 中的 CheckedChanged 事件中~~您可以試試看
    萬丈高樓平地起,只要有心不艱辛
    2009年6月5日 上午 03:00
  • private void cbx_CheckedChanged(object sender, EventArgs e)
       {
            if (((CheckBox)(sender)).IsChecked??false)
              {
                    label1.Text = ((CheckBox)(sender)).Text;
              }
        }
    2009年6月5日 上午 03:12
  • Wang:
        我猜你的checkBox應該是複數的吧?蹂躪大指出一個重要的地方,其實用CheckedChanged事件處理更方便.
        以下的範例是利用程式碼將五個CheckBox的CheckedChanged事件併在一起.
       public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                int i;
              for ( i=1 ; i<=5 ; i++)
                {
                    Object myObj;
                    myObj = this.Controls.Find("checkBox" + System.Convert.ToString(i), true)[0];
                    ((CheckBox)myObj).CheckedChanged += new System.EventHandler(this.checkBox_CheckedChanged);
                }

            }

            private void checkBox_CheckedChanged(object sender, EventArgs e)
            {
                if (((CheckBox)sender).Checked == true)
                {
                    label1.Text = ((CheckBox)sender).Text;
                }
                else
                {
                    label1.Text = "";
                }
            
            }
        }

    • 已標示為解答 Wang40 2009年6月5日 上午 06:36
    2009年6月5日 上午 03:17
    版主
  • 因為他提供的程式都是寫在label1.Text
    前面的有勾
    後面的沒勾
    就會被清掉了
    多個CheckBox應該較沒意義才是
    除非是用來顯示類似狀態列的訊息
    用以提示目前所做的動作

    http://www.dotblogs.com.tw/larrynung/
    2009年6月5日 上午 03:30
  • hi,
    忘了打說我要放多個checkBox,
    把它秀在label上,是為了要看有沒有動作而已。
    多謝解答。
    2009年6月5日 上午 06:39