如何在C#表单中通过右键单击禁用的按钮来启用该按钮?
在我的C#迷你应用程序中,我有一个按钮,我想通过右键单击来启用和禁用它。i、 e.当通过右键单击按钮启用时,它将变为禁用,当它禁用时,右键单击它将其状态更改为启用。禁用已启用按钮简单明了,但右键单击无法启用;因为按钮被禁用,而非事件被发送到消瘦代码。如何在C#表单中通过右键单击禁用的按钮来启用该按钮?,c#,winforms,button,isenabled,C#,Winforms,Button,Isenabled,在我的C#迷你应用程序中,我有一个按钮,我想通过右键单击来启用和禁用它。i、 e.当通过右键单击按钮启用时,它将变为禁用,当它禁用时,右键单击它将其状态更改为启用。禁用已启用按钮简单明了,但右键单击无法启用;因为按钮被禁用,而非事件被发送到消瘦代码。 我该怎么办?禁用控件的鼠标事件将传递给其父控件 您可以在那里捕获它们并测试光标是否在按钮上 例如: if (button1.Bounds.Contains(e.Location)) button1.Enabled = true; 如果您有多个按钮
我该怎么办?禁用控件的鼠标事件将传递给其父控件
您可以在那里捕获它们并测试光标是否在按钮上
例如:
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如果您对答案满意,请考虑考虑它. -我看到您从未这样做过:去(不可见)在左上方,在答案的下面,点击它!它变成绿色,同时给我们带来一点名声。如果你对答案很满意,请考虑考虑它。-我看到你从来没有这样做过:去(不可见的)。勾选左上角答案票数下方的复选框并单击它!它变为绿色并为我们双方赢得了一点声誉。它是否为另一个答案增加了价值?它是否为另一个答案增加了价值?