如何在C#表单中通过右键单击禁用的按钮来启用该按钮?

如何在C#表单中通过右键单击禁用的按钮来启用该按钮?,c#,winforms,button,isenabled,C#,Winforms,Button,Isenabled,在我的C#迷你应用程序中,我有一个按钮,我想通过右键单击来启用和禁用它。i、 e.当通过右键单击按钮启用时,它将变为禁用,当它禁用时,右键单击它将其状态更改为启用。禁用已启用按钮简单明了,但右键单击无法启用;因为按钮被禁用,而非事件被发送到消瘦代码。 我该怎么办?禁用控件的鼠标事件将传递给其父控件 您可以在那里捕获它们并测试光标是否在按钮上 例如: if (button1.Bounds.Contains(e.Location)) button1.Enabled = true; 如果您有多个按钮

在我的C#迷你应用程序中,我有一个按钮,我想通过右键单击来启用和禁用它。i、 e.当通过右键单击按钮启用时,它将变为禁用,当它禁用时,右键单击它将其状态更改为启用。禁用已启用按钮简单明了,但右键单击无法启用;因为按钮被禁用,而非事件被发送到消瘦代码。
我该怎么办?

禁用控件的鼠标事件将传递给其父控件

您可以在那里捕获它们并测试光标是否在按钮上

例如:

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)) 

禁用控件的鼠标事件将传递给其父控件

您可以在那里捕获它们并测试光标是否在按钮上

例如:

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)) 

右键单击以启用和禁用按钮不是标准的或推荐的按钮行为,因此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;
        }
    }
}
公共部分类表单1:表单
{
私有布尔值按钮1右键单击;
公共表格1()
{
初始化组件();
_按钮1isRightClicked=false;
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
MessageBox.Show(“Hi”);
}
私有void Form1\u MouseDown(对象发送方,MouseEventArgs e)
{

如果(e.X>=button1.Location.X&&e.X=button1.Location.Y&&e.Y=button1.Location.X&&e.X=button1.Location.Y&&e.Y右键单击以启用和禁用按钮不是标准或推荐的按钮行为,因此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;
        }
    }
}
公共部分类表单1:表单
{
私有布尔值按钮1右键单击;
公共表格1()
{
初始化组件();
_按钮1isRightClicked=false;
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
MessageBox.Show(“Hi”);
}
私有void Form1\u MouseDown(对象发送方,MouseEventArgs e)
{

如果(E.X>=Butn1.Lo.x&&X= Buto1.1.位置.y&& y=Butn1.Lo.x&&X= Buto1.1位置.Y&& Y如果您对答案满意,请考虑考虑它. -我看到您从未这样做过:去(不可见)在左上方,在答案的下面,点击它!它变成绿色,同时给我们带来一点名声。如果你对答案很满意,请考虑考虑它。-我看到你从来没有这样做过:去(不可见的)。勾选左上角答案票数下方的复选框并单击它!它变为绿色并为我们双方赢得了一点声誉。它是否为另一个答案增加了价值?它是否为另一个答案增加了价值?