我正在开发标签按钮作为用户控件,我怎样才能让它像radiobutton一样工作。 “当用户在组中选择一个选项按钮(也称为单选按钮)时,其他按钮会自动清除”。谢谢。
答案 0 :(得分:4)
假设您的自定义标签按钮控件名为MyTabButton
,
覆盖并实现Equals,和
然后在自定义控件类的Click事件处理程序中
if (this.Checked)
foreach(Control myBut in Parent.Controls)
if (myBut is MyTabButton && !myBut.Equals(this))
myBut.Checked = false;
答案 1 :(得分:2)
如果您想要单选按钮的行为,请使用单选按钮。
使用javascript隐藏单选按钮并创建标签按钮代替原始单选按钮。将单击事件从标签按钮提供给原始单选按钮。您可能还希望有一个公共事件来取消选择其他选项卡按钮。 击>
如果禁用了javascript,您的按钮也会很好地降级。 击>
由于您已经提到过您使用的是winforms而不是使用Javascript,因此您可以覆盖派生的RadioButton类的paint方法,以将Radiobutton绘制为选项卡。这是一个基本的例子
public class ButtonRadioButton : RadioButton {
protected override void OnPaint(PaintEventArgs e) {
PushButtonState state;
if (this.Checked)
state = PushButtonState.Pressed;
else
state = PushButtonState.Normal;
ButtonRenderer.DrawButton(e.Graphics, e.ClipRectangle, state);
}
}
答案 2 :(得分:1)
显然你需要一个按钮容器,每当选择一个usercontrol时,将事件激活到容器,容器取消选择另一个usercontrol
答案 3 :(得分:0)
需要更多信息,如果这是WindowsForms,WPF,ASP.NET等..但
如果是WPF,我写了一篇帖子,解释了我解决这个问题的方法: Grouping and Checkboxes in WPF
答案 4 :(得分:-1)
已编辑以包含答案
您可以通过重写OnClick或OnMouseClick事件来实现它。我没有通过“清除按钮”得到你的意思,所以我只是改变它的Backcolor。您可以轻松地根据您的财产或其他需求进行调整。
using System;
using System.Linq;
using System.Windows.Forms;
namespace StackOverflow
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
}
public partial class MyRadioButton : Button
{
//Override OnClick event. - THIS IS WHERE ALL THE WORK IS DONE
protected override void OnClick(EventArgs e)
{
do
{
/*
This is where you select current MyRadioButton.
I'm changing the BackColor for simplicity.
*/
this.BackColor = System.Drawing.Color.Green;
/*
If parent of current MyRadioButton is null,
then it doesn't belong in a group.
*/
if (this.Parent == null)
break;
/*
Else loop through all other MyRadioButton of the same group and clear them.
Include System.Linq for this part.
*/
foreach (MyRadioButton button in this.Parent.Controls.OfType<MyRadioButton>())
{
//If button equals to current MyRadioButton, continue to the next RadioButton
if (button == this)
continue;
//This is where you clear other MyRadioButton
button.BackColor = System.Drawing.Color.Red;
}
}
while (false);
//Continue with the regular OnClick event.
base.OnClick(e);
}
}
}