WinForms как вызвать событие двойного щелчка на кнопке?

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

Кто-нибудь знает хорошее решение этой проблемы? Спасибо!


person TheScholar    schedule 21.11.2012    source источник
comment
msdn.microsoft .com / en-US / library /   -  person JWiley    schedule 21.11.2012


Ответы (4)


Нет штатная кнопка на двойные нажатия не реагирует. См. Документацию по событию Button.DoubleClick. Он не реагирует на двойные щелчки, потому что в Windows кнопки всегда реагируют на щелчки и никогда на двойные щелчки.

Вы ненавидите своих пользователей? Потому что вы создадите кнопку, которая действует иначе, чем любая другая кнопка в системе, и некоторые пользователи никогда этого не поймут.

При этом вам необходимо создать отдельный элемент управления, производный от Button, для события с этим (потому что SetStyle - защищенный метод)

public class DoubleClickButton : Button
{
    public DoubleClickButton()
    {
        SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true);
    }
}

Затем вам придется вручную добавить обработчик событий DoubleClick в свой код, поскольку он по-прежнему не отображается в среде IDE:

public partial class Form1 : Form {
    public Form1()  {
        InitializeComponent();
        doubleClickButton1.DoubleClick += new EventHandler(doubleClickButton1_DoubleClick);
    }

    void doubleClickButton1_DoubleClick(object sender, EventArgs e)  {
    }
}
person shf301    schedule 21.11.2012
comment
Можете ли вы сказать мне, как связать эти два класса DoubleClickButton и Form1, я имею в виду, как мы устанавливаем ControlStyles кнопки на Form1 из другого класса? - person Mogli; 11.11.2013
comment
я не эксперт, но setstyle можно использовать и без наследования, см. ответ здесь stackoverflow.com/questions/36771882 / - person barlop; 01.09.2016
comment
Предполагая, что у меня есть группа кнопок, для которых требуется событие doubleClick. Должен ли я добавлять их по одному? Или есть способ получить все групповые кнопки и назначить их этому методу? Я пытался это сделать, но не могу установить событие для групповых кнопок. - person ; 05.04.2018

Использовать этот. Код работает.

public class DoubleClickButton : Button
            {
                public DoubleClickButton()
                {
                    SetStyle(ControlStyles.StandardClick | 
ControlStyles.StandardDoubleClick, true);
                }
            }

 DoubleClickButton button = new DoubleClickButton();
 button.DoubleClick += delegate (object sender, EventArgs e)
        {
           //codes
        };
person Yağmur Kopar    schedule 23.12.2020

Я использовал для добавления события MouseDoubleClick на свой объект, например:

this.pictureBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDoubleClick);

person elle0087    schedule 18.04.2017
comment
Измените свой ответ, включив в него некоторые пояснения. Ответы, содержащие только код, мало что могут сделать для обучения будущих читателей SO. Ваш ответ находится в очереди на модерацию как некачественный. - person mickmackusa; 18.04.2017

Двойной щелчок - это просто два обычных события щелчка в пределах времени t друг от друга.

Вот какой-то псевдокод для этого, предполагая, что t = 0,5 секунды

button.on('click' , function(event) {
    if (timer is off or more than 0.5 milliseconds)
        restart timer
    if (timer is between 0 and 0.5 milliseconds)
        execute double click handler
})
person Steven    schedule 21.11.2012
comment
Не делайте этого! Вы проигнорируете настройку скорости двойного щелчка пользователя. Windows сообщит вам, был ли это двойной щелчок, если вы последуете другому ответу, полученному от Button, и создадите кнопку с двойным щелчком. - person Eric Falsken; 15.03.2013
comment
Это не имеет ничего общего с двойным щелчком - person Diego; 17.12.2017