Какой элемент управления был нажат? - PullRequest
1 голос
/ 20 декабря 2011

У меня проблема с MouseEvents в моем приложении WinForm C #. Я хочу получить ВСЕ щелчки мышью в моем приложении. Как определить, какой элемент управления был нажат (я новичок в C #)

Ответы [ 6 ]

5 голосов
/ 21 декабря 2011

Попробуйте:

private void Control_Clicks(object sender, EventArgs e)
{
    Control control = (Control)sender;   // Sender gives you which control is clicked.
    MessageBox.Show(control.Name.ToString());
}

Это , это или это может помочь.

Надеюсь, это поможет.

1 голос
/ 20 декабря 2011
    private void Form1_Load(object sender, EventArgs e)
    {
        SetupClickEvents(this);
    }

    /// <summary>
    /// This will loop through each control within the container and add a click handler to it
    /// </summary>
    /// <param name="container">The container whose children to handle clicks for</param>
    private void SetupClickEvents(Control container)
    {
        foreach(Control control in container.Controls)
        {
            control.Click += HandleClicks;
        }
    }
    private void HandleClicks(object sender, EventArgs e)
    {
        Control control = (Control)sender;
        MessageBox.Show(string.Format("{0} was clicked!", control.Name));
    }
0 голосов
/ 22 июля 2016

Это действительно просто!

На событие клика в Win-форме вы добавляете

// Here is a modified version of your code:
private void Form1_Click(object sender, EventArgs e)
{
    var control = Form1.ActiveControl;
}
0 голосов
/ 21 декабря 2011

На второй вопрос задан вопрос «Как определить, какой элемент управления был нажат?» каждый элемент управления имеет события, которые могут быть обработаны в коде.

Самый простой способ узнать, когда был нажат элемент управления, - это прикрепить его к событию clicked элемента управления, что делается из свойств элемента управления. Возможно, вам придется щелкнуть значок молнии, чтобы увидеть события. Двойной щелчок рядом с чеком создаст пустой обработчик.

Например, если у вас была простая форма с единственной кнопкой, прикрепляющей события клика к форме и к кнопке, она сообщит вам, когда есть щелчок в любом месте. В большинстве случаев нажатие кнопки будет наиболее полезным для обработки.

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

    private void Form1_Click(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {

    }
}
0 голосов
/ 20 декабря 2011

Вы должны подключить их все к одному и тому же обработчику событий. Это можно сделать в окне свойств для рассматриваемых элементов управления. Вы также можете написать свою собственную функцию для обхода дерева управления и привязать функцию к каждому из их обработчиков событий.

Вы можете рекурсивно перемещаться по коллекции Form.Controls с помощью цикла foreach.

void attachGlobalHandler(Control aToParse, EventHandler aGlobalHandler)
{
    foreach(Control lControl in aToParse.Controls)
    {
        attachGlobalHandler(lControl, aGlobalHandler);
        lControl.Click += aGlobalHandler;
    }
}

И затем вы вызываете это в своей форме с именем функции, которую вы хотите вызвать:

attachGlobalHandler( Form1, myClickHandler );

И это должно привязать его к КАЖДОМУ кликабельному элементу управления в форме. Аргумент sender обработчика должен всегда ссылаться на элемент управления, который вызвал событие. При этом я, вероятно, просто прикреплю отдельные обработчики событий, если вам не нужно обрабатывать несколько элементов управления как группу.

ВНИМАНИЕ: приведенный выше код не проверен.

0 голосов
/ 20 декабря 2011

Если вы работаете с Windows Forms, у вас есть несколько вариантов:

  1. Перехват события мыши , и после выясните, действительно ли выбранный компонент делает часть вашего приложения

  2. Вы можете объявить базовый класс MyComponent : Control. Этот компонент переопределяет событие MousClick и вызывает специальное событие , уведомляющее о факте. Каждый элемент управления в вашем приложении происходит от этого элемента управления, поэтому каждый элемент управления будет уведомлять о произошедшем щелчке. Достаточно подписаться событиям и обрабатывать их по запросу.

Просто пара идей ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...