none
已知CheckBox的ID,但不知CheckBox的OnCheckedChanged事件名,要如何在CS中有ID執行他的OnCheckedChanged RRS feed

  • 一般討論

  • 因為我寫了一個副程式

    想要INPUT 一個CheckBox後跑他的OnCheckedChanged事件。

    不知道可不可以....程式大概如下

      private void ConEnable(CheckBox MyCheckBox, TextBox MyTextBox, bool MyBool) {
        MyCheckBox.Enabled = MyBool;
        MyTextBox.Enabled = MyBool;
        if (!MyBool) {// == false
          MyCheckBox.Checked = MyBool;
          MyTextBox.Text = "";
          //MyCheckBox.CheckedChanged += new EventHandler(...);
        }
      }

    • 已變更類型 George.Chang 2014年7月8日 上午 08:47 Customer Discontinued
    2014年6月30日 上午 10:06

所有回覆

  • 委派函式的名稱可以亂取的 , 當然一般我們會遵照某種命名原則, 只是為了讓程式碼易讀而已

    參考

    如何:訂閱及取消訂閱事件 (C# 程式設計手冊)

    另外, 我曾經寫過一些關於委派的文章, 你可以參考一下, 也許可以幫助你了解事件與事件委派函式的關係

    http://www.dotblogs.com.tw/billchung/Tags/%e5%a7%94%e6%b4%be/default.aspx


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年6月30日 下午 02:50
  • 您有設定AutoPostBack屬性為True嗎? 像這樣:

    MyCheckBox.AutoPostBack=true;

    ...

    MyCheckBox.Enabled = MyBool;
    MyTextBox.Enabled = MyBool;
     if (!MyBool) {// == false
          MyCheckBox.Checked = MyBool;
          MyTextBox.Text = "";

    2014年7月1日 上午 01:55
  • 可以再問一下麼~

    我是希望

    uncheck CheckBox2 後->觸發 CheckBox2_CheckedChanged 後,由ConEnable function 使 CheckBox3 為 false  ->且在.ConEnable 中,觸發MyCheckBox的CheckedChanged 事件(也就是CheckBox3_CheckedChanged)->使CheckBox4 為 false ....

    可以一連串的觸發下去。可是現在觸發的CheckedChanged事件名不知,所以我不知道如何去觸發MyCheckBox的CheckedChanged 事件。

    2014年7月1日 上午 02:41
  • 我看了一下我的CODE

    我INPUT的CHECKBOX在.aspx那頁都設為TRUE了,

    只是我想要在 ConEnable中執行MyCheckBox的CheckedChanged 事件。不知道怎寫。

    2014年7月1日 上午 02:51
  • 你只要改變 CheckBox 的 Checked 屬性就會引發 CheckBox.CheckedChanged 事件

    原來是 true 變成 false, 觸發, 反之亦然


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年7月1日 上午 04:39
  • 衷心的建議你,把要做的事情,跟 event handler 拆開來看。

    event handler 只是 UI 觸發事件要做的事。而這個要做的事,除了這個 event handler 以外,其他地方也可以用。

    回到你的問題本身,你要定義的是「行為的意義」,當checkbox2 unchecked 時,代表什麼意思。代表他要做 ConEnable 這件事。而 ConEnable 完整要做的事情是什麼,例如 要把 checkbox3, checkbox4, checkbox5...checkboxN 的 checked 設為 false。

    而不是想要用 event handler chain 去一連串觸發,這是錯誤的切入點。

    by the way, 你的需求看起來很像是 javascript 要做的事情,建議不要什麼都拉到 server 端來處理,寫網頁基本的 javascript 還是要學會怎麼用的。


    授人以魚,三餐之需;授人以漁,終生之用。
    希望各位發問的朋友,得到的是如何釣魚的知識。之後也可以分享給別人,釣魚的知識。而不是肚子餓了,就上來討魚吃。

    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki

    2014年7月1日 上午 05:05
    版主
  • 聽 91 的建議好一點

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2014年7月1日 上午 05:09
  • 另外,從你的 function 的 signature 看起來,感覺會不會只需要把傳入的 checkbox 改成集合,就可以滿足你的需求啊?

    例如:

            private void ConEnable(IEnumerable<CheckBox> MyCheckBoxs, TextBox MyTextBox, bool MyBool)
            {
                foreach (var checkbox in MyCheckBoxs)
                {
                    checkbox.Enabled = MyBool;
                    if (!MyBool)
                    {
                        checkbox.Checked = MyBool;
                    }
                }
    
                if (!MyBool)
                {
                    MyTextBox.Text = "";
                }
            }

    雖然我覺得這一段 function 因為不曉得「你的目的」,所以看起來很詭異,但感覺你要的就是針對一個 checkbox 的集合去做事,這是不需要使用 checkbox 的 event handler 做事的。IEnumerable<T> 可以自行換成 T[] 或 List<T>。

    另外,如我上個回覆所說,如果你只是想做畫面上的唯讀或全選/反全選,真的不要搞得這麼複雜,用 javascript 去處理,submit 回 server 端時檢查資料的正確性就好。


    授人以魚,三餐之需;授人以漁,終生之用。
    希望各位發問的朋友,得到的是如何釣魚的知識。之後也可以分享給別人,釣魚的知識。而不是肚子餓了,就上來討魚吃。

    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki

    2014年7月1日 上午 05:15
    版主
  • 之前和同事和我的MASTER請教了一下。

    他們是建議我將id名用成有規律的方式去做。

    如:chkA01,

             chkA0101,

                      chkA010101,

                      chkA010102,...

            chkA0102,

                      chkA010201,...

    同理

    chkA02,.....

    chkB01,.....

    然後就可以像您說的在CS中用FOREACH去網頁抓所有的CHECKBOX,再判別CHECKBOX的ID去控制 子CHECKBOX。

    我感覺就是有點像TREEVIEW命名的方式~

    如果用JAVASCRIPT可能會像:

        var elm = document.form1.elements;
        for(i=0;i<elm.length;i++){
          if((elm[i].type=="checkbox" ) && (elm[i].name.indexOf("chkANAME") >= 0)){
            elm[i].checked=false;
          }
        }   //這是我以前的CODE using elements's name

    但如果是用CS頁面( server 端)去做

    就是用FOREACH,在ASPX中再用某個東西把CHECKBOX包起來。再後再判別CHECKBOX的ID去控制 子CHECKBOX。



    • 已編輯 mkdh321 2014年7月3日 上午 02:20 訂正AGAIN
    2014年7月3日 上午 02:17
  • 您好,歡迎您將對您有幫助的回覆標示為解答,以利討論的進行並幫助其他有類似問題的朋友。謝謝您!
    2014年7月7日 上午 04:01