2013-10-24 45 views
0

我想說明的按鈕控制(我有6個按鍵)的MouseEnter事件圖像寫入一個方法,我可以使用下面的代碼爲每個按鈕只有所有按鈕的MouseEnter事件

void button1_MouseEnter(object sender, EventArgs e) 
      { 
       this.button1.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.img2)); 
      } 

但我不想要爲每個按鈕輸入事件,因此試圖使它只在方法上,所以可以使用每個按鈕這樣的事情,但我怎麼會通過這種方法比不同的按鈕選擇不同的圖像?

void button_MouseLeave(object sender, EventArgs e) 
     { 
      var btn = (Button)sender; 
      this.btn.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.particular image for particular button)); 
     } 
+0

可能重複的[我如何訂閱多個按鈕到同一個事件處理程序,並根據點擊按鈕的行爲?](http://stackoverflow.com/questions/3814234/how-can-i-subscribe - 多個按鈕到相同的事件處理程序和行動 - 相應) –

回答

4

您註冊所有按鈕的相同事件。

例如:

btn1.MouseEnter += genericButton_event; 
btn2.MouseEnter += genericButton_event; 

您使用相同的名稱button,所以你可以使用btn.Name屬性的圖像添加到資源的例子。 (喜歡的東西:btn1.png和btn2.png),以及你使用反射帶有字符串「名稱」屬性分配資源:

private void genericButton_event(object sender, EventArgs e) 
    { 
     var btn = (Button)sender; 
     btn.BackgroundImage = new Bitmap(System.Reflection.Assembly.GetEntryAssembly(). 
      GetManifestResourceStream("MyProject.Resources" + btn.Name +".png"));  

    } 

您使用的字符串,這樣你可以得到的資源得到位圖所需的背景圖像取決於按鈕名稱。

+0

我用它像這樣'btn.BackgroundImage = new Bitmap(System.Reflection.Assembly.GetEntryAssembly()。 GetManifestResourceStream(「Properties .Resources「+ btn.Name +」.png「));'顯示我這個錯誤''null'的值對於'stream'無效。'我也按照按鈕更改了名稱 – Durga

+0

您必須使用full應用程序名稱空間在Properties.Resources之前添加您的項目名稱。嘗試,直到你得到它。我在很多winforms表單中使用這個代碼。 –

+0

我怎麼能檢查'GetManifestResourceStream'是什麼流,我試過這個''StudentModule.Properties.Resources'',但得到同樣的錯誤。 – Durga

1

您可以使用Tag屬性。它需要一個object - 所以你可以放在那裏任何你想要的。

或者您可以通過在按鈕後面命名並搜索正確命名的圖像來選擇顯示哪個圖像。

Button btn = new Button(); 
btn.Tag = <YourImage>; // Here you define which image to show 
btn.MouseLeave += btn_MouseLeave; 

void btn_MouseLeave(object sender, EventArgs e) 
{ 
    Button b = (Button)sender; 
    b.BackGroundImage = (System.Drawing.Image)b.Tag; 
} 

當然,您必須檢查Tag是否爲空。

相關問題