2016-03-04 59 views
1

enter image description here如何將複選框添加到列表中查看c#Winform應用程序中的列標題?

我想在頭部添加複選框,並且如果我在頭選中複選框應該像全選,然後取消選擇所有...就像上面圖片!

enter image description here

我想創建一個複選框,這種類型的ListView頭在C#

+1

你見過這[問題](http://stackoverflow.com/questions/5554068/listview-checkbox-selecting-all-deslecting-all-c-sharp-4-0?answertab=votes#tab -最佳) ? – Yog

+0

@Robotnik看看上面的圖像我想添加複選框到列表視圖標題 –

+1

你可以設置'ListView'的OwnerDraw'屬性爲true,並在第一列標題上繪製'ChceckBox'並處理'ColumnClick'以執行選擇/取消選擇所有。 –

回答

8

您可以設置ListView爲true OwnerDraw財產和第一列標題繪製ChceckBox和處理ColumnClick進行選擇/取消全部選擇。

  • 繪製ListView你需要處理DrawColumnHeaderDrawItemDrawSubItem事件。

  • DrawColumnHeader事件中繪製複選框。

  • 設置e.DrawDefault = true;爲其他繪圖事件繪製默認渲染。
  • 處理ColumnClick事件並將列標題的選中狀態存儲在列的標記中。同樣對於每個列表視圖項目,設置Checked屬性以執行全選/全部取消選擇。

代碼:

private void listView1_DrawColumnHeader(object sender, 
             DrawListViewColumnHeaderEventArgs e) 
{ 
    if (e.ColumnIndex == 0) 
    { 
     e.DrawBackground(); 
     bool value = false; 
     try 
     { 
      value = Convert.ToBoolean(e.Header.Tag); 
     } 
     catch (Exception) 
     { 
     } 
     CheckBoxRenderer.DrawCheckBox(e.Graphics, 
      new Point(e.Bounds.Left + 4, e.Bounds.Top + 4), 
      value ? System.Windows.Forms.VisualStyles.CheckBoxState.CheckedNormal : 
      System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal); 
    } 
    else 
    { 
     e.DrawDefault = true; 
    } 
} 

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) 
{ 
    e.DrawDefault = true; 
} 

private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) 
{ 
    e.DrawDefault = true; 
} 

private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) 
{ 
    if (e.Column == 0) 
    { 
     bool value = false; 
     try 
     { 
      value = Convert.ToBoolean(this.listView1.Columns[e.Column].Tag); 
     } 
     catch (Exception) 
     { 
     } 
     this.listView1.Columns[e.Column].Tag = !value; 
     foreach (ListViewItem item in this.listView1.Items) 
      item.Checked = !value; 

     this.listView1.Invalidate(); 
    } 
} 

截圖:

enter image description here

  • 在上述圖像我有3列。
  • 我爲第一列設置空文本。
  • I將CheckBoxes屬性ListView設置爲true。
  • I爲項目設置空文本併爲每個項目添加2個子項目。
+0

非常感謝你的兄弟... –

+2

@SantoshKokatnur你可以在你的codeproject文章中給Reza Aghaei一些功勞... https://www.codeproject.com/Tips/1083589/Adding-Checkbox-to-a -List-View-Column-Header-in-Cs – Dom84

+0

@ Dom84在codeproject中賦予了Reza功勞。看一看。 –

相關問題