C# Radiobutton类-需要将Radiobutton分组

C# Radiobutton类-需要将Radiobutton分组,c#,C#,我创建了自己的单选按钮类–即MyRadioButton,因为内置的.NET类没有有效地扩展。(用于触摸屏) MyRadioButton类工作得很好,除了我不知道如何解决的问题之外——当我在一个表单上有多个MyrDaiObButton时,我可以选择所有这些按钮。。。。它们在某种程度上不能正常工作,当一方选择一方时,另一方会自动被取消选择 我的代码如下: public class MyRadioButton : Control { public MyRadioButton() {

我创建了自己的单选按钮类–即MyRadioButton,因为内置的.NET类没有有效地扩展。(用于触摸屏)

MyRadioButton类工作得很好,除了我不知道如何解决的问题之外——当我在一个表单上有多个MyrDaiObButton时,我可以选择所有这些按钮。。。。它们在某种程度上不能正常工作,当一方选择一方时,另一方会自动被取消选择

我的代码如下:

 public class MyRadioButton : Control
{
    public MyRadioButton()
    {

    }
    private string textTowrite;
    private bool checkStatus;
    private int width;
    private int height;
    public event EventHandler CheckedChanged;
    public delegate void MyHandler1(object sender, EventArgs e);

    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);
        if (Checked)
            Checked = false;
        else
            Checked = true;
        Invalidate(true);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        ButtonState btnstate;
        Rectangle rRadioButton;

        if (checkStatus)
        {
            btnstate = ButtonState.Checked;
        }
        else
            btnstate = ButtonState.Normal;

        rRadioButton = new Rectangle(0, 0, RBWidth, RBHeight);
        FontFamily ft = new FontFamily("Tahoma");
        Font fnt_radio = new Font(ft, (int)(18), FontStyle.Bold);

        ControlPaint.DrawRadioButton(e.Graphics, -2, 10, rRadioButton.Width,
            rRadioButton.Height, btnstate);
        //RadioButton's text left justified & centered vertically
        e.Graphics.DrawString(textTowrite, fnt_radio, new SolidBrush(Color.Black), rRadioButton.Right + 1, 16);

    }

    protected virtual void OnCheckedChanged(EventArgs e)
    {
        if (CheckedChanged != null)
        {
            CheckedChanged(this, e);
        }

    }

    public override string Text
    {
        get { return textTowrite; }
        set { textTowrite = value; }
    }

    public bool Checked
    {
        get { return checkStatus; }
        set
        {
            checkStatus = value;
            OnCheckedChanged(EventArgs.Empty);
        }
    }

    public int RBWidth
    {
        get
        {
            if (width == 0)
            {
                width = 40;
            }
            return width;
        }
        set
        {
            if (width != value)
            {
                width = value;
                Invalidate();
            }
        }
    }

    public int RBHeight
    {
        get
        {
            if (height == 0)
            {
                height = 40;
            }
            return height;
        }
        set
        {
            if (height != value)
            {
                height = value;
                Invalidate();
            }
        }

    }

}
如果有人能为我提供解决方案,我将不胜感激,因为我正在拔头发

谢谢


Jens

由于这是您的控件,您必须提供逻辑,使其像单选按钮一样工作

首先,我建议将所有单选按钮放入容器控件中


然后,在您的控件的开始<代码> OnClick <代码>方法中,使用<代码> GETCubEngultEngult方法检索容器对象并遍历容器中的所有单选按钮,并将其选中的属性设置为false。

< P>您还可以考虑直接从<代码> NaveButtudio>代码>继承控件。允许您访问
RadioButton.GroupName
属性,或者您需要自己实现kbrinley发布的此类功能。

您是否考虑过在
RadioButton
控件上使用图像?根据的文档(继承自):

要使用派生按钮控件 显示图像,设置 财产或财产;及 财产


请注意,我不知道如何使用图像执行选定/未选定状态。。。我想ImageList与此相关。

如果我直接从RadioButton继承控件,OnPaint函数将绘制较大的RadioButton(我想要的那个),以及原来较小的单选按钮。这就是为什么我要写我自己的。正确,这是你将完全覆盖的事件。