2012-02-16 35 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

相關問題