Chèn ảnh vào một SubItem bất kỳ trong ListView

Chèn ảnh vào một SubItem bất kỳ trong ListView

Bạn đã từng sử dụng ListView để hiển thị danh sách bản ghi. Trong ListView, mặc định chỉ cho bạn hiển thị ảnh ở Cột đầu tiên. Vậy làm thếnào để có thể hiển thị ảnh ở 1 SubItem thuộc cột bất kỳ trong ListView? Bài viết này sẽ hướng dẫn bạn làm được điều đó!

Trong ví dụ này, tôi sẽ thay chữ giới tính Nam, Nữ trong danh sách = 2 hình ảnh đại diện tương ứng tại cột giới tính.

Để bắt đầu với bài này, bạn hãy thiết kế 1 Form đơn giản như sau:

Tiếp theo, bạn chuẩn bị 2 cái ảnh thể hiện giới tính Nam là "male.png" và nữ là "female.png" và đặt chúng vào Thư mục "Bin/Debug" của ứng dụng cho dễ lấy đường dẫn (Bạn có thể đặt vị trí khác nếu muốn). Ảnh bạn có thể Search trên http://iconfinder.com sẽ có luôn!!

Bây giờ bạn hãy lập trình để thêm 1 Item vào ListView:

private void btnAdd_Click(object sender, EventArgs e)

        {

            ListViewItem item = new ListViewItem((listView1.Items.Count+1).ToString());

            item.SubItems.Add(txtFullName.Text);

            string gender = "Nam";

            if (rdoFemale.Checked)

                gender = "Nữ";           

            item.SubItems.Add(gender);


            // Dùng thuộc tính Tag để lưu vết giới tính của 1 Item

            item.Tag = gender;

            listView1.Items.Add(item);

        }

Với đoạn code trên bạn đã có thể thêm các Item như thông thường.

Và để có thể vẽ ảnh vào 1 SubItem bạn hãy thiết lập thuộc tính OwnerDraw của ListView = True

Sau đó lập trình sử lý với 2 sự kiện: DrawSubItem DrawColumnHeader như sau:

private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {

            // Xác định điều kiện cột cần vẽ

            if (e.Header == this.clGender)

            {         

                // Tạo ảnh Icon tùy theo giới tính

                Image icon = Image.FromFile("male.png");             

                if(e.Item.Tag.ToString()=="Nữ")

                    icon = Image.FromFile("female.png"); 


                // Tạo kích thước vẽ ảnh, cách viền 10px

                var imageRect = new Rectangle(e.Bounds.X + 10, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height);

                // Vẽ ảnh

                e.Graphics.DrawImage(icon, imageRect);              

            }
            else
            {

                // Mặc định là vẽ Subitem này như thông thường

                e.DrawDefault = true;                

            }           

        }     

        private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
        {

            // Mặc định là vẽ cột tiêu đề

            e.DrawDefault = true;

        }

Đến đây bạn có thể chạy thử nghiệm chương trình, hãy thêm các Item với các giới tính khác nhau, bạn sẽ được một kết quả như mong muốn:

Chèn ảnh vào một SubItem bất kỳ trong ListView

Chúc bạn thành công!

Bạn thấy bài viết này như thế nào?: 
Average: 10 (1 vote)
Ảnh của Tommy Tran

Tommy owner Express Magazine

Drupal Developer having 9+ year experience, implementation and having strong knowledge of technical specifications, workflow development. Ability to perform effectively and efficiently in team and individually. Always enthusiastic and interseted to study new technologies

  • Skype ID: tthanhthuy

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Chương trình mã số điện tử Dell Pass mới (e-Dell Pass)

Chương trình mã số điện tử Dell Pass mới (e-Dell Pass)

Nhằm phục vụ khách hàng tốt hơn trong quá trình bảo hành và dịch vụ hậu mãi, Dell Việt Nam sẽ tiến hành thay thế hoàn toàn thẻ Dell Pass nhựa truyền thống bằng hình thức MÃ SỐ ĐIỆN TỬ DELLPASS (e-Dell Pass).

Diệt ruồi muỗi trong chăn nuôi tháng 06 năm 2016

Diệt ruồi muỗi trong chăn nuôi tháng 06 năm 2016

Sản xuất "thịt sạch" và tạo vùng chăn nuôi an toàn không chỉ có ý nghĩa tăng tính cạnh tranh, hội nhập mà còn có ý nghĩa thiết thực

Sử dụng nginx làm proxy vượt tường lửa

Sử dụng nginx làm proxy vượt tường lửa

Lướt Facebook chập chờn, sử dụng public proxy lại chậm chạp. Nếu bạn có một dedicated server hay một vps, chúng ta có thể cài nginx để làm một http proxy hỗ trợ việc truy cập Facebook.

Công ty diệt chuột T&C

 

Diet con trung