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

时间:2016-01-28 17:10:38

标签: c# arrays winforms

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




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




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


 

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




我为所有单选按钮使用公共事件处理程序:




  private void test_CheckedChanged(object sender,EventArgs e)
 {
 var xx = sender作为RadioButton;
 //做东西
 positionInArray = Array.IndexOf(theArray,xx);
}
  




除了最后一行代码“xx”应该属于“myType”而不是我设法检索的“radioButton”。





所以有人可以告诉我如何从“radioButton”获取“myType”的引用“?或者有更好的选择吗?




2 个答案:

答案 0 :(得分:1)

您可以使用Array.FindIndex之类的:

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

答案 1 :(得分:1)

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

这种方法可以让您始终引用您的父类型,前提是您在获取的内容中添加了更多代码并设置了。

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;
    }
}