C# 如何获得类似单选按钮组的行为,以便只能选择一个项目

C# 如何获得类似单选按钮组的行为,以便只能选择一个项目,c#,C#,我制作了一个用户控件并将其放置在面板中。用户控件有自己的鼠标单击事件,可更改颜色。如果单击面板上的某个控件,我希望取消选择其他控件。比如单选按钮。我该怎么做 这是我的面板的图片。如果选择了两个用户控件,则这两个控件都存在 public partial class list : UserControl { void chgtxt(Label lbl, string s) { lbl.Text = s; } public list() {

我制作了一个用户控件并将其放置在面板中。用户控件有自己的鼠标单击事件,可更改颜色。如果单击面板上的某个控件,我希望取消选择其他控件。比如单选按钮。我该怎么做

这是我的面板的图片。如果选择了两个用户控件,则这两个控件都存在

public partial class list : UserControl
{
    void chgtxt(Label lbl, string s)
    {
        lbl.Text = s;
    }

    public list()
    {
        InitializeComponent();
    }

    private void panel1_MouseClick(object sender, MouseEventArgs e)
    {
        panel1.BackColor = Color.Yellow;
        chgtxt(label1, "Changed");
    }
}


您可以枚举面板的子项并取消选择不是当前控件的子项:

foreach (list listControl in Parent.Controls.Cast<Control>().OfType<list>())
{
    if (list != this)
    {
        list.Deselect();
    }
}

您可以枚举面板的子项并取消选择不是当前控件的子项:

foreach (list listControl in Parent.Controls.Cast<Control>().OfType<list>())
{
    if (list != this)
    {
        list.Deselect();
    }
}
要继续展开,需要查看控件所属的父控件,并取消选择列表中的其他项

public partial class list : UserControl
{
    void chgtxt(Label lbl, string s)
    {
        lbl.Text = s;
    }

    public list()
    {
        InitializeComponent();
    }

    private void panel1_MouseClick(object sender, MouseEventArgs e)
    {
        panel1.BackColor = Color.Yellow;
        chgtxt(label1, "Changed");

        if(this.Parent != null)
        {    
            foreach (list listControl in this.Parent.Controls.Cast<Control>().OfType<list>())
            {
                if (listControl != this)
                {
                    listControl.Deselect();
                }
            }
        }
    }

    private void Deselect()
    {
        // Do whatever to show this control as deselected.
    }
}
公共部分类列表:UserControl
{
void chgtxt(标签lbl,字符串s)
{
lbl.Text=s;
}
公开名单()
{
初始化组件();
}
专用无效面板1\u鼠标单击(对象发送器,鼠标目标e)
{
panel1.BackColor=颜色。黄色;
chgtxt(标签1,“变更”);
如果(this.Parent!=null)
{    
foreach(列出此.Parent.Controls.Cast()of type()中的listControl)
{
if(listControl!=此)
{
listControl.Deselect();
}
}
}
}
私有void取消选择()
{
//执行任何操作以将此控件显示为取消选择。
}
}
要展开,您需要查看控件所属的父控件,并取消选择列表中的其他项

public partial class list : UserControl
{
    void chgtxt(Label lbl, string s)
    {
        lbl.Text = s;
    }

    public list()
    {
        InitializeComponent();
    }

    private void panel1_MouseClick(object sender, MouseEventArgs e)
    {
        panel1.BackColor = Color.Yellow;
        chgtxt(label1, "Changed");

        if(this.Parent != null)
        {    
            foreach (list listControl in this.Parent.Controls.Cast<Control>().OfType<list>())
            {
                if (listControl != this)
                {
                    listControl.Deselect();
                }
            }
        }
    }

    private void Deselect()
    {
        // Do whatever to show this control as deselected.
    }
}
公共部分类列表:UserControl
{
void chgtxt(标签lbl,字符串s)
{
lbl.Text=s;
}
公开名单()
{
初始化组件();
}
专用无效面板1\u鼠标单击(对象发送器,鼠标目标e)
{
panel1.BackColor=颜色。黄色;
chgtxt(标签1,“变更”);
如果(this.Parent!=null)
{    
foreach(列出此.Parent.Controls.Cast()of type()中的listControl)
{
if(listControl!=此)
{
listControl.Deselect();
}
}
}
}
私有void取消选择()
{
//执行任何操作以将此控件显示为取消选择。
}
}

实际上,您不是在问如何创建列表面板,而是如何获得类似单选按钮组的行为,以便只能选择一个项目。你应该更新你的标题。谢谢@ScottChamberlain。标题更新。你不需要“在C#中”,问题有标签,你也不需要把它们放在标题中。我是C#编程新手,也是Stackoverflow新手。谢谢你宝贵的帮助@ScottChamberlain。真的,你不是在问如何制作一个列表面板,而是如何获得像单选按钮组那样的行为,以便只能选择一个项目。你应该更新你的标题。谢谢@ScottChamberlain。标题更新。你不需要“在C#中”,问题有标签,你也不需要把它们放在标题中。我是C#编程新手,也是Stackoverflow新手。谢谢你宝贵的帮助@ScottChamberlain。这是个好主意,但我认为你对物品的层次结构有点困惑<代码>此是位于某种列表框或类似列表框中的项目。因此op真正要使用的是
foreach(Parent.Controls.Cast.OfType()中的list listControl)
这是一个好主意,但我认为您对项目的层次结构有点困惑<代码>此是位于某种列表框或类似列表框中的项目。因此,op真正要使用的是
foreach(Parent.Controls.Cast.OfType()中的list listControl)
不幸的是,我遇到了这个错误。EnumerableRowCollectionExtensions.Cast(EnumerableRowCollection)'是一个方法,在给定的contextOops中无效,我忘记了在使用System.Linq;'Cast之后的一组()已插入且.NET版本较新。但不起作用。刷新页面并再次尝试新代码,我有一些错误。是的。它在工作我非常感谢。我对枚举知之甚少。你能给我一些资源链接吗?不幸的是我得到了这个错误。EnumerableRowCollectionExtensions.Cast(EnumerableRowCollection)'是一个方法,在给定的contextOops中无效,我忘记了在使用System.Linq;'Cast之后的一组()已插入且.NET版本较新。但不起作用。刷新页面并再次尝试新代码,我有一些错误。是的。它在工作我非常感谢。我对枚举知之甚少。你能给我一些资源链接吗?