Как я могу включить отключенную кнопку, щелкнув правой кнопкой мыши по ней в формах C #? - PullRequest
0 голосов
/ 16 декабря 2018

В моем мини-приложении на C # есть кнопка, которую я хочу включить и отключить, щелкнув по ней правой кнопкой мыши.то есть, когда кнопка активируется нажатием правой кнопки мыши, она поворачивается для отключения, а когда она отключается, щелкните правой кнопкой мыши по ней, чтобы изменить ее статус для включения.Отключить активированную кнопку легко и просто, но включить ее правой кнопкой мыши невозможно;потому что кнопка отключена, а не событие отправляется на истощающий код.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

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

public partial class Form1 : Form
{
    private Boolean _button1IsRightClicked;
    public Form1()
    {
        InitializeComponent();
        _button1IsRightClicked = false;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Hi");
    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.X >= button1.Location.X && e.X <= (button1.Location.X + button1.Width) &&
            e.Y >= button1.Location.Y && e.Y <= (button1.Location.Y + button1.Height))
        {
            _button1IsRightClicked = true;
        }
        else
        {
            _button1IsRightClicked = false;
        }
    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.X >= button1.Location.X && e.X <= (button1.Location.X + button1.Width) &&
            e.Y >= button1.Location.Y && e.Y <= (button1.Location.Y + button1.Height))
        {
            _button1IsRightClicked = false;
            enableDisableButton1(button1.Enabled);
        }
        else
        {
            _button1IsRightClicked = false;
        }
    }

    private void enableDisableButton1(Boolean isEnabled)
    {
        if (isEnabled)
        {
            button1.Enabled = false;
            isEnabled = false;
        }else
        {
            button1.Enabled = true;
            isEnabled = true;
        }
    }

    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            _button1IsRightClicked = true;
        }
        else
        {
            _button1IsRightClicked = false;
        }
    }

    private void button1_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right && _button1IsRightClicked == true)
        {
            _button1IsRightClicked = false;
            enableDisableButton1(button1.Enabled);
        }
        else
        {
            _button1IsRightClicked = false;
        }
    }
}
0 голосов
/ 16 декабря 2018

События мыши отключенного элемента управления передаются в Parent.

Вы можете поймать их там и проверить, находится ли курсор на кнопке.

Пример:

if (button1.Bounds.Contains(e.Location)) button1.Enabled = true;

Если у вас есть несколько кнопок, вам нужно проверить их все..:

private void panel1_MouseDown(object sender, MouseEventArgs e)
{
    foreach (Control ctl in panel1.Controls)
    {
        if (ctl is Button && ctl.Bounds.Contains(e.Location)) 
            ctl.Enabled = true;
    } 
}

Если предполагается включить только правую кнопку мыши, добавьте для нее тест, например, так:

if (e.Button.HasFlag(MouseButtons.Right) && 
    ctl is Button && ctl.Bounds.Contains(e.Location)) 
...