Доступ к пользовательским свойствам инструмента с помощью полиморфизма

#c# #winforms

#c# #winforms

Вопрос:

Несколько новый для C #. Я постараюсь объяснить свою проблему как можно лучше.

Мне трудно получить доступ к свойствам, которые я создал в пользовательском инструменте. У меня есть много таких инструментов в моем графическом интерфейсе, поэтому это не так просто, как просто ввести его явно с помощью свойства. Эти элементы управления содержатся в списке, и я хочу иметь возможность легко получать доступ к их свойствам (что является частью их изолированного и отдельного проекта решения). Вот мой пример того, что у меня есть до сих пор:

 List<Control> controlList = new List<Control>();
private void btnStart_Click(object sender, EventArgs e)
{        
    foreach (var item in controlList)
    {
       if (item.Enabled)
       {
           custom_control1.Code = "8917237";
           custom_control1.MacAddress = "000000000001";
       }
    }

 // do other stuff based on the above credentials

 }
  

Я хотел бы иметь возможность выполнить следующее в моем операторе if:

    item.Code = .... // calculation
   item.MacAddress = .... // this will increment in hex depending on how many controls I have Enabled
  

так что каждый экземпляр ‘item’ имеет это настраиваемое свойство управления, которое я могу изменить с помощью цикла for или чего-то еще. Примечание: у каждого элемента инструмента управления будет свой MAC и код, основанный на вычислении.

Я не уверен, как это реализовать. Я думаю, моя главная проблема в том, что я могу видеть список свойств по умолчанию (например, видимый, Включить и т. Д.), Но не мои пользовательские свойства. Выполнение чего-то вроде: controlList[0].Code также не помогает мне из-за той же проблемы. Я, очевидно, что-то здесь недопонимаю.

Заранее спасибо за любую помощь.

Комментарии:

1. Если я правильно прочитал ваш вопрос… просто добавьте все «общие» свойства и методы в interface , пусть ваш управляет implement интерфейсом (возможно, с помощью, возможно, переопределенного абстрактного базового класса). Затем в вашем цикле controlList приведите свой элемент управления к типу интерфейса

2. Когда вы говорите «пользовательский инструмент», вы имеете в виду, что создали подкласс Control?

3. @ChristopheD Спасибо за помощь. Похоже, вы поняли мою проблему, однако я не на том уровне, на котором я могу это понять, а затем реализовать вашу процедуру ответа. Если у вас есть время, возможно ли привести пример, на котором я мог бы учиться? Тогда я мог бы, вероятно, реализовать с этой точки зрения понимания.

Ответ №1:

Чтобы получить доступ к вашим пользовательским свойствам непосредственно в объектах списка, список должен быть списком вашего пользовательского класса, а не Control . Итак, вместо

 List<Control> controlList = new List<Control>();
  

использование

 List<MyCustomClass> controlList = new List<MyCustomClass>();
  

Комментарии:

1. Это работает!! Я могу получить доступ к своим пользовательским свойствам с помощью List<project.classname> Спасибо.