#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> Спасибо.