如何将对象与单选按钮配对

本文关键字:单选按钮 对象 | 更新日期: 2023-09-27 18:32:23

我正在开发一个小表单应用程序,我已经将我的单选按钮与普通类中的列表"配对"。这样做的目的是打开/关闭相应的列表

public class myType
{
    public RadioButton button { get; set; }
    public ListBox list { get; set; }
}

我继续通过数组内的 for 循环创建这些对

for (int i = 0; i < broj_botuna; i++)
{
    theArray[i] = new myType();
}

我对所有单选按钮使用通用事件处理程序:

private void test_CheckedChanged(object sender, EventArgs e)
{
    var xx = sender as RadioButton;
    //do stuff
    positionInArray = Array.IndexOf(theArray, xx);
}

除了最后一行代码"xx"应该是"myType"类型,而不是我设法检索的"radioButton"。

那么谁能告诉我如何获得从"radioButton"到"myType"的引用? 还是有更好的选择?

如何将对象与单选按钮配对

您可以使用

如下Array.FindIndex

var positionInArray = Array.FindIndex(theArray, b => b.button == xx);

您可以创建一些构造,以便根据需要轻松地将属性与父对象相关联。

此方法将允许您始终引用父类型,前提是您在 get 和 set 中添加了更多代码。

static void Main()
{
    myType item = new myType();
    var button = new Button();
    myType.button = button;
    var list = new ListBox();
    myType.list = list;
    item = list.GetParent();
    bool isSameButton = button == item.button;
    bool isSameList = list == item.list;
    Assert.IsTrue(isSameButton);
    Assert.IsTrue(isSameList);
}
public class myType
{
    private RadioButton _button;
    public RadioButton button
    {
        get { return _button; }
        set {
                value.AssociateParent(this);
                _button = value;
            }
    }
    private ListBox _list;
    public ListBox list
    {
        get { return _list; }
        set {
                value.AssociateParent(this);
                _list= value;
            }
    }
}
public static class Extensions
{
    private static Dictionary<object, object> Items { get; set; }
    static Extensions()
    {
        Items = new Dictionary<object, object>();
    }
    public static void AssociateParent(this object child, object parent)
    {
        Items[child] = parent;
    }
    public static object GetParent(this object child)
    {
        if (Items.ContainsKey(child)) return Items[child];
        return null;
    }
}