2012-02-16 13 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:動的

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フォームのレイアウトは大きな苦労です。私はこれをコーディングする時間がありませんが、手順は次のとおりです。

  • あなたの予定を介して容器
  • ルックとして形成され、各
  • のラベルコントロールを作成するために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

が行わ最初の3 - どのように私は動的に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

私はジェイミーの答えにコメントすることはできませんと思いますが、あなたはプログラムで実行してのOnClickメソッドを追加することができraklos:

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

関連する問題