2012-02-16 3 views
0

약속이있는 곳은 List<Appointment>입니다.목록에 데이터 바인딩을 추가하고 Windows Forms를 사용하여 컨트롤을 동적으로 추가합니다.

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 : 동적

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

: 도움이된다면, 목록에있는 항목의 수는 아마 내가 제이미 이데의 의견에 따라 조금 더 들어 왔 이상 10

되지 않습니다 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

이 완료 처음 세 - 내가 어떻게 동적으로 온 클릭을 추가하는 방법은 무엇입니까? – 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 :

label.Click += new EventHandler(label_Click); 

비주얼 스튜디오는 경우에 대한 스텁을 자동 생성한다 당신은 그것을 타이핑하기 시작합니다. 이 같은

뭔가 당신이 시작할 수 :

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

관련 문제