伊莉討論區

標題: 關於button sender的問題 [打印本頁]

作者: KEIORL    時間: 2011-12-26 01:55 AM     標題: 關於button sender的問題

button現在有10個 我不想一個一個去宣告Click的事件
GOOGLE了不少相關的,大概都是Button B= sender as Button;TextBox1.text=B.text;不然就是Button b= ((b)sender); 但寫進去後按按鍵都沒有觸發...所以上來問問各位大大們是否有什麼樣的方式可以讓C#自行去run他的物件ID並且觸發事件.
作者: arthurliuliu    時間: 2011-12-26 07:55 AM

1. 你的語法似乎跟VB混在一起了吧?C#的宣告有用as?
    通常是這樣寫吧?
  1. Button b=(Button)sender;
複製代碼
2. 有10個Button,想共用同一個Click事件,
    只要把Button的Click那邊的事件名稱改成一樣的就好了。
作者: lpdl    時間: 2012-1-3 01:36 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: 1xnswitch    時間: 2012-1-3 11:46 AM

自己寫一段程式碼,然後在事件的連結中加入.
  1. private void btnChipSelect(object sender, EventArgs e)
  2.         {
  3.             Button btn = (sender as Button);
  4.             if (btn.BackColor == Color.Transparent)
  5.                 btn.BackColor = Color.Wheat;
  6.             else if (btn.BackColor == Color.Wheat || btn.BackColor == Color.Teal || btn.BackColor == Color.Red)
  7.                 btn.BackColor = Color.Transparent;
  8.         }
複製代碼

[attach]68193753[/attach]
作者: KEIORL    時間: 2012-1-5 04:35 AM

這邊謝謝各位大大的講解....
我看了二樓就了解問題的根本了...
老實說小弟在學程式語言這塊 實在沒有天分...
完全搞不懂所謂的名詞(像是封裝阿~控制項之類的專業名詞
只是傻傻的一股勁靠著感興趣的FU在寫,總而言之還希望各位大大們繼續不吝指導了
作者: Aeroth    時間: 2012-1-13 09:50 AM

本帖最後由 Aeroth 於 2012-1-13 09:51 AM 編輯

修正一下,在C#中確實有as這個operator
as (C# Reference)
  1. Button b=(Button)sender;
  2. Button b = sender as Button;
複製代碼
這兩行都是用來將sender轉型(cast)為Button,不同的是當sender不是Button這個type時,第一行會拋出InvalidCastException:
Unhandled Exception: System.InvalidCastException:
Unable to cast object of type 'XXXXXX' to type 'YYYYYY'.
第二行則是回傳null,不拋Exception
作者: arthurliuliu    時間: 2012-1-13 10:59 AM

Aeroth 發表於 2012-1-13 09:50 AM
修正一下,在C#中確實有as這個operator
as (C# Reference)這兩行都是用來將sender轉型(cast)為Button,不同 ...

謝謝分享,一般都是看到以括號直接轉型,
我還沒有看過用 as 轉型態的,感謝您的指正喔!
作者: 1xnswitch    時間: 2012-1-16 10:03 AM

本帖最後由 1xnswitch 於 2012-1-16 10:04 AM 編輯

除了as(先判斷,如果是Yes,直接轉成你所要的型態) 可用之外還有 is(先判斷然後傳回布林值).
  1. if(o is Employee)
  2. {
  3.     Employee e=(Employee)o;
  4. }
複製代碼

作者: 羕漾    時間: 2012-1-17 12:19 AM

as 是用在不確定物件型別
如果無法正確轉成該型別則會給予 null 值
在 VB 則是透過 TryCast

>>但寫進去後按按鍵都沒有觸發..
另外事件是需要綁定的,因為在 .Net 設計階段是沒有控制項陣列這回事
所以你必需使用像
  1. Button1.Click += new EventHandler(this.Button_Click);
複製代碼
如果多個物件則可以多次宣告
至於該指定放哪呢?你可以放在 Init 或 Form_Load 裡皆可
重點就是在按鈕被按下前的時機前會進行按鈕事件的綁定
(另外你在設計階段時連點兩下,其實他作的動作就是到 .Designer.cs 裡幫你加一段事件綁定的程式碼罷了)




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!