2016-01-28 2 views
1

Я работаю над небольшим приложением формы, и у меня есть «спаренные» мои переключатели со списками в общем классе. Целью этого было включить/выключить соответствующий списокКак я могу скрестить объекты с переключателями?

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

Я исхожу создать эти пары через цикл внутри массива

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

за исключением того, что последняя строка кода «хх» должны быть типа «MyType», а не «RadioButton», что мне удалось получить.

Может ли кто-нибудь сказать мне, как мне получить ссылку с «radioButton» на «myType»? Или есть лучшая альтернатива?

+1

Это HTML-форма, о которой вы говорите? WPF? WinForms? Каждая технология представляет собой различные проблемы, как ответить на это. – krillgar

+0

@krillgar Я только догадывался winforms, полностью основанный на имени обработчика событий. Думаю, я ошибаюсь, и это WPF. – ryanyuyu

+0

@ryanyuyu Я даже мог видеть WebForms. – krillgar

ответ

1

Вы можете использовать Array.FindIndex как:

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

все еще работает над этим, но я думаю, что это работает! Спасибо. –

1

Вы можете создать несколько конструкций, которые позволяют легко связать свои свойства родительского объекта, если вы хотите.

Этот подход позволит вам всегда ссылаться на ваш родительский тип при условии, что вы добавили еще немного кода в свои настройки 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; 
    } 
} 
+0

Я посмотрю на это и расскажу, как это происходит. Я ценю ваши усилия. Я все еще новичок ... так что любой альтернативный метод даст мне большие дивиденды. Ty! –

+0

Без проблем человек. Удачи! –

+0

большое спасибо. Я никогда раньше не пользовался утверждением, и для меня это совершенно новый инструмент! Я очень ценю это. –