2012-02-16 33 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窗体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中形成的容器
  • 去翻你的约会和每个
  • 创建标签控件标签控件添加到面板的Controls集合
  • 分配一个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 2012-02-16 16:46:07

+0

查看我的编辑。几乎在那里 – raklos 2012-02-16 16:55:23

+0

看到我的编辑(希望)的答案。 – 2012-02-16 17:43:50

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 2012-02-16 17:14:05

相关问题