Как с помощью мыши ввести событие с кодами?

1

Представьте, что у меня есть 10 кнопок, и я хочу использовать событие ввода мыши, чтобы увеличить ширину и высоту кнопок на 30. Если я захочу сделать это, я должен использовать событие мыши для каждого из них один за другим, как я могу писать только мой код один раз для всех кнопок. Я пытаюсь использовать цикл foreach, но не уверен, что я должен использовать загрузку формы и не знаю, как обрабатывать событие. (форма окон)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace main
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (Control item in Controls)
            {
                if (item is Button)
                {
                    // code
                }
            }
        }
    }
}
Теги:

4 ответа

2
Лучший ответ

Прежде всего, сократите свой код, получив только кнопки в форме. Затем добавьте обработчик событий для события MouseEnter:

foreach (Button btn in Controls.OfType<Button>())
{
    btn.MouseEnter += new System.EventHandler(btn_MouseEnter);
}

Затем в случае изменения ширины:

private void btn_MouseEnter(object sender, System.EventArgs e) 
{
    var senderButton = (Button)sender;
    senderButton.Width += 30;
}

Вы также должны добавить событие обработчика событий + событие для MouseLeave чтобы снова уменьшить ширину. В противном случае кнопки будут продолжать расти:

foreach (Button btn in Controls.OfType<Button>())
{
    btn.MouseEnter += new System.EventHandler(btn_MouseEnter);
    btn.MouseLeave += new System.EventHandler(btn_MouseLeave );
}

private void btn_MouseEnter(object sender, System.EventArgs e) 
{
    var senderButton = (Button)sender;
    senderButton.Width += 30;
}

private void btn_MouseLeave (object sender, System.EventArgs e) 
{
    var senderButton = (Button)sender;
    senderButton.Width -= 30;
}

Код foreach-loop можно добавить после InitializeComponent() или в событие Form_Load.

private void Form1_Load(object sender, System.EventArgs e)
{
    foreach (Button btn in Controls.OfType<Button>())
    {
        btn.MouseEnter += new System.EventHandler(btn_MouseEnter);
        btn.MouseLeave += new System.EventHandler(btn_MouseLeave );
    }
}
1

Вы можете легко OfType все ваши кнопки, используя OfType расширения типа OfType следующим образом:

foreach(var button in this.Controls.OfType<Button>())
{
    button.MouseEnter += button_MouseEnter;
}
  • 0
    Где я должен написать этот код?
  • 0
    Вы можете написать это в load
1

Используйте функции, чтобы обернуть свою логику.

Напишите свой код, который изменит вес и ширину в методе, подпишитесь на MouseMove или на любое другое событие, которое вам подходит.

Затем используйте GetChildAtPoint, чтобы найти кнопку, чтобы вы могли изменить ее размер.

// This goes in the 
foreach(var button in this.Controls.OfType<Button>())
{
    button.Mouse += button_IncreaseSize;
}


protected override void button_IncreaseSize(MouseEventArgs e)
{
   // use GetChildAtPoint to get the control
   var button = GetChildAsPoint(new Point(e.X, e.Y));
   // Change the size of button, eg. with Scal, and with the Size property, or by chaning Height and Width propertis manually
   button.Scale(new SizeF(30, 30));
}
0

В качестве альтернативы вы также можете это сделать:

private void Form1_Load(object sender, EventArgs e)
{              
    foreach (Control item in this.Controls)
    {
        if (item is Button)
        {
            //item.MouseEnter += (s, ea) => { YourMethodName(); };
              item.MouseEnter += new System.EventHandler(btn_MouseEnter);
        }
    }
}

private void btn_MouseEnter(object sender, System.EventArgs e)
{
   //your code to increase width and height
    var btnSenderButton = sender as Button;
    btnSenderButton.Width += 30;
}
  • 0
    Это также рабочее решение, но, учитывая, что OP, вероятно, не понимает полную концепцию обработки событий, это решение может быть запутанным или непонятным.
  • 0
    Да. Ты прав. Но я только что заметил экземпляр Form1 здесь. Почему это используется?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню