【问题标题】:Control click event hit box控制点击事件命中框
【发布时间】:2016-11-24 09:45:05
【问题描述】:
有没有办法改变c#中点击事件的“点击框”,由点击按钮或其他控件引起?
我正在使用自定义 GUI 控件来控制设备。这些控件用作指示当前状态(绿色或黑色)的小圆圈和用户可以单击的按钮。
问题是,我在设备上使用的是触摸屏,点击小圆圈不是那么容易。 50% 的时间你会错过它并且不会引发控件点击事件。
我想在不改变圆圈的视觉大小的情况下更改它,因为我的 GUI 空间已经有限。所以我想要一个比控件本身稍大的不可见的可点击点击框。有可能吗?
【问题讨论】:
-
您可以通过多种方式解决问题,例如:♦ 您可以使用flat button,将FlatStyle 设置为Flat 并使用相同的@ 987654325@,将FlatAppearance.MouseDownBackColor 和FlatAppearance.MouseOverBackColor 设置为合适的颜色,并为按钮使用所需的图像。 ♦ 您可以将按钮区域设置为圆形区域并将圆形画得更小。 ♦ 或者您可能想使用circular radio button list。
标签:
c#
winforms
events
click
【解决方案1】:
在设计UserControl 时使用Panel,然后将可点击项目放置在面板内,Panel 默认是透明的。您不必为其设置任何其他设置,并且如果用户单击面板会触发 control1_Click 事件。
private void control1_Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
private void panel1_Click(object sender, EventArgs e)
{
control1_Click(sender, e);
}
【解决方案2】:
感谢大家的提示!
我最终所做的与 Abdul 和 Active92 的答案相似。
我为每个按钮创建了一个图片框,使其比按钮本身更大,并将其放置在按钮“后面”。 (右键单击并发送到后面)。由于我不添加任何图像,因此图片框是不可见的。
在每个图片框单击事件处理程序中,我只是触发原始控件的单击事件。
【解决方案3】:
创建一个更大的按钮并执行类似于下面的代码的操作,其中 button1 是您的原始按钮,而 button2 是更大的按钮。
private void button1_Click(object sender, EventArgs e)
{
ShowMessage();
}
private void button2_Click(object sender, EventArgs e)
{
ShowMessage();
}
private void ShowMessage()
{
MessageBox.Show("ok", "ok");
}
将 button2 的文本设置为空白。
将FlatStyle 设置为flat。
将BorderColor、MouseDownBackColor 和MouseOverBackColor 设置为BackColor。
右击button2并发送到后面。