2013-10-24 1 views
0

Я хочу показать изображение на MouseEnter случае кнопки управления (у меня есть 6 кнопок), я могу использовать ниже код для каждой кнопкиписать один метод только для 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 -multiple-buttons-to-the-same-event-handler-and-act-matching) –

ответ

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 ("Свойства .Resources "+ btn.Name +" .png "));' показывая мне эту ошибку. Значение «null» недопустимо для «stream». Я также изменил имя в соответствии с кнопкой – Durga

+0

. Вы должны использовать полный пространство имен приложений. Добавьте название проекта перед 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 является недействительным.

Смежные вопросы