Привязка данных к списку и динамическое добавление элементов управления с помощью Windows Forms - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть List<Appointment>, где Назначение.

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 привязка данных .Я пробовал с панелью макета таблицы, но просто не знаю, с чего начать с изменения цвета элемента при нажатии.

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

Я получил немного больше, согласно комментарию Джейми Ид:

    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;
}

Ответы [ 4 ]

2 голосов
/ 16 февраля 2012

Динамически выкладывать 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;
    }
1 голос
/ 16 февраля 2012

Полагаю, я не могу комментировать ответ Джейми, но вы можете программно добавить метод 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;
}
1 голос
/ 16 февраля 2012

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

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

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

0 голосов
/ 16 февраля 2012

Вы можете обмануть и создать его в WebBrowserControl. Вы будете в знакомом месте. Используйте ObjectforScripting для WeBbrowser <=> winforms.

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx

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