Задача на размышление (приведение типов или, может, другое решение) - C#

Узнай цену своей работы

Формулировка задачи:

Есть класс MasterPanel, одним из элементов которого является панель Panel. Элементы MasterPanel хранятся в словаре Dictionary<string, MasterPanel>. Доступ к панели через MasterPanel.Panel. Панели содержат на себе различные контролы Control (от конкретного типа контрола код зависеть не должен). Прямого доступа к элементам на панели нет. Только доступ к самой панели. Требуется с этих нескольких панелей считать значения в элементах и записать их в одну коллекцию, xml-файл или что-то другое, что потом позволит восстановить значения. Я мало до чего додумался. Есть идея записать все значения из panel.Controls (для каждой панели) в коллекцию List<var>. Тут возникает несколько проблем: 1. Не во всех контролах значение записывается в свойство text. А value Или selectedItem из Control не достать, требуется приведение. 2. Если какой-либо контрол, например, Label взять из panel.Controls (без приведения он будет иметь тип Control), и поместить его самого в var, то какой тип получит эта переменная var, и что делать дальше. Помогите, пожалуйста с решением проблемы. Прилагаю описание класса MasterPanel:
Листинг программы
  1. /// <remark>
  2. /// Класс панели мастера
  3. /// </remark>
  4. public class MasterPanel
  5. {
  6. private string nextPanel = null;
  7. private Panel panel;
  8. private bool canContinue = false;
  9. #region СВОЙСТВА
  10. /// <summary>
  11. /// Возвращает элемент Control представляющий панель для ее указания как родителя
  12. /// </summary>
  13. public Control Panel {
  14. get { return panel; }
  15. }
  16. /// <summary>
  17. /// Задает родительский контейнер для панели
  18. /// </summary>
  19. public Control parent {
  20. set {panel.Parent = value; }
  21. }
  22. /// <summary>
  23. /// Задает положение панели в родительском контейнере
  24. /// </summary>
  25. public Point Location {
  26. set {panel.Location = value; }
  27. }
  28. /// <summary>
  29. /// Возвращает или задает ключ для получения следующей панели настройки
  30. /// </summary>
  31. public string NextPanel {
  32. get { return nextPanel; }
  33. set { nextPanel = value; }
  34. }
  35. #endregion
  36. public MasterPanel()
  37. {
  38. this.panel = new Panel();
  39. panel.Size = new System.Drawing.Size(400,340);
  40. panel.AutoScroll = true;
  41. panel.AutoSize = false;
  42. }
  43. /// <summary>
  44. /// Отображает панель в родительском контейнере
  45. /// </summary>
  46. public void Show()
  47. {
  48. if(panel.Parent != null) panel.Show();
  49. else throw new Exception("Не указан родительский контейнер!");
  50. }
  51. public void Hide()
  52. {
  53. panel.Hide();
  54. }
  55. }

Решение задачи: «Задача на размышление (приведение типов или, может, другое решение)»

textual
Листинг программы
  1. string[] propNames = {"Value", "Checked"};
  2. var props = control.GetType().GetProperties(bf);
  3. var prop;
  4. try {prop = props.First(x => propNames.Contains(x.Name));}
  5. catch {prop = props.First(x => x.Name == "Text");}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы