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

 
A Roadmap for Success: The Design Brief

Lộ trình thành công: The Design Brief

Described succinctly by Tad Crawford in AIGA Professional Practices in Graphic Design, the design brief “digs deep into a project and identifies the main factors that drive the entire creative strategy.”

Cấu trúc file, install, module views trong Drupal 8

Cấu trúc file, install, module views trong Drupal 8

Over the last few months, we've been covering the Drupal community's progress towards releasing Drupal 8.

 Năm 2012 MacBook Pro sẽ được thiết kế lại để giống như MacBook Air?

Năm 2012 MacBook Pro sẽ được thiết kế lại để giống như MacBook Air?

Apple hiện đang có một kế hoạch để thiết kế lại máy tính xách tay MacBook Pro và có thể nó sẽ lấy cảm hứng từ gia đình MacBook Air.

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

 

Diet con trung