2012-02-16 1 views
0

У меня есть List<Appointment>, где есть Назначение.Связывание данных со списком и динамическое добавление элементов управления с использованием форм Windows

public class Appointment 
{ 
    public string Title { get; set; } 
    public string Start { get; set; } 
    public string End { get; set; } 
} 

Я хочу, чтобы динамически добавлять каждый элемент списка на отдельной строке в виде следующим образом:

item.Title + " between" + item.Start + " and " + item.End; 

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

Я прихожу из веб-фона, но я просто борюсь с Windows Forms data binding. Я пробовал с панелью таблицы таблицы, но просто не знаю, с чего начать с изменения цвета элемента при щелчке.

PS: Если это помогает, количество элементов в списке, вероятно, не более 10.

Я получил немного дальше, как за комментарий Джейми Ide в:

var appts = GetAllCalendarItems(); 
    foreach (var item in appts) 
    { 
     Label label = new Label(); 
     label.Text = item.Title + " between" + item.Start + " and " + item.End; 
     label.Click += new EventHandler(label_Click); 
     flowLayoutPanel1.Controls.Add(label); 
    } 

... 

private void label_Click(object sender, EventArgs e) 
{ 
    // This is wrong - what goes here?? 
    ((Label)sender).ForeColor = Color.Red; 
} 

ответ

1

Динамически Укладка Windows Forms - огромная боль. У меня нет времени, чтобы закодировать это, но следующие шаги:

  • Добавить FlowLayoutPanel сформировать в качестве контейнера
  • аблюдая ваши назначения и создать элементы управления этикеткой для каждого
  • Добавить элементы управления ярлыком на панель-х контроль сбора
  • Назначение обработчика OnClick для каждого элемента управления этикеткой для переключения цветового

не связывайтесь с этим для привязки данных.


Если вы не изменили первоначальный цвет лейбла от значения по умолчанию, это будет переключать его:

private void label1_Click(object sender, EventArgs e) 
    { 
     var lbl = (Label)sender; 
     var toggle = lbl.ForeColor == SystemColors.ControlText; 
     lbl.ForeColor = toggle ? Color.Red : SystemColors.ControlText; 
    } 
+0

сделал первые три - как я динамически добавить OnClick? – raklos

+0

см. Мои правки. почти там – raklos

+0

См. мое редактирование для (надеюсь) ответа. –

1

Вы можете добавить каждый текстовое поле в качестве члена элемента вида этикетки или списка. Затем обработайте событие «OnClick» или «SelectedIndexChanged». Чтобы создать обработчик события OnClick, дважды щелкните элемент управления в представлении проекта. Изменение обработчика так:

private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     listView1.SelectedItems[0].ForeColor = Color.Red; 
    } 

Если вы не уверены, обработчики событий, не пугайтесь, они довольно легко, просто посмотрите их here возможно. Если просмотр списка не является тем, что вы ищете, попробуйте использовать тот же подход для другого элемента управления.

1

Я предполагаю, что я не могу прокомментировать ответ Джейми, но raklos вы можете программно добавить метод OnClick, выполнив:

label.Click += new EventHandler(label_Click); 

Visual Studio должна автоматически генерировать заглушки для вас, когда вы начинаете вводить это.

Что-то подобное может вам начать:

private void label_Click(object sender, EventArgs e) { ToggleTextColor((Label)sender); } 

private void ToggleTextColor(Control control) 
{ 
    var currentColor = control.ForeColor; 
    control.ForeColor = currentColor == Color.Red ? Color.Black : Color.Red; 
} 
+0

, но что должен содержать метод? см. мое обновление – raklos

Смежные вопросы