Щелкните пользовательский элемент управления и покажите некоторые переменные, связанные с ним, в другом элементе управления. - PullRequest
0 голосов
/ 22 октября 2010

В моем приложении Win Forms я создаю массив динамических пользовательских элементов управления внутри цикла.Это, давайте назовем их «коробки», как мои основные части информации.Я также создаю строковые массивы в других частях кода, которые содержат информацию об этих «коробках», так что, например, строка [3] является переменной box [3], как и stringa [3], stringb [3],stringc [3] ... все массивы с одинаковым индексом связаны с блоком с этим индексом.Надеюсь, я проясню.

Только 2 из этих строк показаны в 2 надписях внутри каждого «поля» пользовательского элемента управления в массиве, но остальные есть, потому что я хочу сделать что-то, чтобы, когда пользователь щелкаетодин из этих элементов управления, другие строки могут быть показаны в другом элементе управления.Что-то вроде «Больше информации ...».Все «ящики» в массиве должны иметь один и тот же обработчик событий, потому что я создаю + 100.

Чтобы поместить его в контекст, каждый «ящик» настраиваемого элемента управления в массиве показывает Символ и ценуакции, и я хочу, чтобы, когда пользователь нажимал на каждую акцию, на другом специальном элементе управления отображалась дополнительная информация о котировках, которая напоминает заполнитель для «Подробнее».

Я думаю о 2 способах сделать это:

  • Если бы я мог «определить» индекс элемента управления, по которому щелкнули (то же самое в строках, связанных с ним), я мог бы просто установить для него значение int j и всеЯ должен сделать, это показать все строки a, b, c ... с индексом j . К сожалению, я не могу найти способ сделать это, может быть, это даже невозможно.
  • Другой способ, которым я думал, - это создать некоторые свойства для моего пользовательского элемента управления, которые "хранят" эти переменныеи в моем приложении вместо назначения строк я установил бы свойства для каждого элемента управления, которые я мог бы позже получить при нажатии на элемент управления.Я не пробовал это, потому что я не знаю точно, как это сделать.

Что вы думаете?Вы знаете, как мне этого добиться, или у вас есть другая идея, которая будет работать?Пожалуйста помоги!Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 22 октября 2010

Это довольно широкий вопрос реализации, поскольку существует множество способов реализовать что-то подобное.

Если вы создаете две коллекции, одну с кнопками, а другую с информацией, вы можете просто назначить каждому из свойств кнопок «Tag» указатель на соответствующую информацию и назначить общий обработчик события OnClick, отображающий информацию .. что-то вроде:

infoControl.text = ((InfoClass) ((Button) Sender.Tag)). PieceOfInformation;

Но опять-таки есть много способов сделать это, и выбор сводится к тому, как вы храните вашу информацию.

0 голосов
/ 22 октября 2010

Для первого метода у вас может быть свойство вашего пользовательского элемента управления, которое является индексом.

public class Box : Control
{
   // ...existing code

   private int index;
   public int Index
   {
      get
      {
         return index;
      }
      set
      {
         index = value;
      }
   }

}

ИЛИ

Для второго метода вы можете иметь свойствоПользовательский элемент управления, который является дополнительной информационной строкой.

public class Box : Control
{
   // ...existing code

   private string extraInfo;
   public string ExtraInfo
   {
      get
      {
         return extraInfo;
      }
      set
      {
         extraInfo = value;
      }
   }

}

В любом случае, вы можете получить доступ к нужной информации прямо в вашем обработчике кликов для поля "."

0 голосов
/ 22 октября 2010

я не знаю о первом способе - нужно больше разбираться, но вторым способом вы можете расширить свой собственный или встроенный элемент управления: например:

public class ExtendedLabel: Label
{
    public string[] MoreInfo { get; set; }
}

и инициализировать его

public TestForm()
{
    InitializeComponent();
    ExtendedLabel label = new ExtendedLabel();
    label.MoreInfo = new string[] { "test" };
    this.Controls.Add(label);
    label.AutoSize = true;
    label.Location = new System.Drawing.Point(120, 87);
    label.Name = "label1";
    label.Size = new System.Drawing.Size(35, 13);
    label.TabIndex = 0;
    label.Text = label.MoreInfo[0];            
}

А позже в вашем обработчике событий вы можете использовать внутреннюю информацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...