Cara menggunakan kontrol ComboBox untuk mengedit data dalam kontrol ListView dalam Visual C#

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 320344 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menunjukkan bagaimana untuk menggunakan ComboBox kontrol untuk mengedit data dalam ListView kontrol. Metode ini menggantikan pendekatan kotak teks standar mengedit data dalam ListView kontrol

Deskripsi teknik

Dengan menggunakan LabelEdit properti ListView kontrol, Anda dapat mengizinkan pengguna untuk mengedit isi ListView kontrol. Untuk mengedit data dalam ListView kontrol, Anda dapat menggunakan kotak teks standar. Kadang-kadang, ini berguna untuk memiliki kontrol lain untuk mengedit kontrol. Artikel ini mensimulasikan cara menggunakan ComboBox kontrol untuk mengedit data dalam ListView Ketika ListView adalah dalam rincian pandangan.

Ketika pengguna memilih baris dalam ListView, perhitungan dilakukan untuk menemukan persegi panjang melompat-lompat untuk kolom pertama baris yang diklik. Bahwa perhitungan memperhitungkan bahwa kolom tidak dapat dilihat atau mungkin tidak sepenuhnya terlihat ketika baris diklik dan ketika ComboBox ukuran dan ditampilkan dengan tepat.

Selain untuk posisi dan ukuran ComboBox, sampel ini juga menonton untuk dua pesan pada ListView Kendali: WM_VSCROLL dan WM_HSCROLL. Pesan ini terjadi setiap kali pengguna gulungan melalui ListView kontrol secara vertikal maupun horizontal. Karena ComboBox adalah tidak secara fisik bagian dari ListView kontrol, ComboBox tidak secara otomatis gulir dengan ListView. Oleh karena itu, setiap kali salah satu dari dua pesan ini terjadi, ComboBox harus tersembunyi. Untuk melihat pesan ini, Anda membuat custom UserControl kelas yang mewarisi dari ListView kelas. Di kontrol kustom ini, WndProc metode ditimpa agar semua pesan yang akan diperiksa untuk bergulir.

Membuat kontrol ListView warisan

  1. Mulai Microsoft Visual Studio.NET atau Microsoft Visual Studio 2005.
  2. Pada Berkas menu, titik Baru, lalu klik Project.
  3. Dalam Proyek baru kotak dialog, klik Visual C# proyek di bawah Jenis proyek, lalu klik Windows Control perpustakaan di bawah Pola acu.

    Catatan Pada Visual Studio 2005, klik Visual C# di bawah Jenis proyek.
  4. Mengganti semua kode di UserControl kelas dengan kode berikut:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Windows.Forms;
    
    namespace InheritedListView
    {
       /// <summary>
       /// Summary description for UserControl1.
       /// </summary>
       public class MyListView : System.Windows.Forms.ListView
       {
          /// <summary>
          /// Required designer variable.
          /// </summary>
          private System.ComponentModel.Container components = null;
    
          public MyListView()
          {
             // This call is required by the Windows.Forms Form Designer.
             InitializeComponent();
    
             // TODO: Add any initialization after the InitForm call
          }
    
          /// <summary>
          /// Clean up any resources being used.
          /// </summary>
          protected override void Dispose( bool disposing )
          {
             if( disposing )
             {
                if( components != null )
                   components.Dispose();
             }
             base.Dispose( disposing );
          }
    
          #region Component Designer generated code
          /// <summary>
          /// Required method for Designer support - do not modify 
          /// the contents of this method with the code editor.
          /// </summary>
          private void InitializeComponent()
          {
             components = new System.ComponentModel.Container();
          }
          #endregion
    
          private const int WM_HSCROLL = 0x114;
          private const int WM_VSCROLL = 0x115;
    
          protected override void WndProc(ref Message msg)
          {
             // Look for the WM_VSCROLL or the WM_HSCROLL messages.
             if ((msg.Msg == WM_VSCROLL) || (msg.Msg == WM_HSCROLL))
             {
                // Move focus to the ListView to cause ComboBox to lose focus.
                this.Focus();  
             }
    
             // Pass message to default handler.
             base.WndProc(ref msg);
          } 
       }
    }
    					
    Catatan Kode harus berubah dalam Visual Studio 2005. Bila Anda membuat proyek Windows Forms, Visual C# menambahkan salah satu bentuk proyek secara default. Formulir ini dinamakan Form1. Dua file yang mewakili bentuk yang bernama Form1.cs dan Form1.designer.cs. Anda menulis kode dalam Form1.cs. Designer.cs file adalah di mana Windows Forms Designer menulis kode sumber yang mengimplementasikan semua tindakan Anda dilakukan dengan menambahkan kontrol. Untuk informasi lebih lanjut tentang Windows bentuk desainer Visual C# 2005, kunjungi Web site Microsoft berikut:
    http://msdn2.Microsoft.com/en-us/library/ms173077.aspx
  5. Simpan dan membangun proyek.

Membuat contoh aplikasi

  1. Ikuti langkah berikut untuk membuat aplikasi Windows baru dalam Visual C#.BERSIH atau Visual C# 2005:
    1. Pada Berkas menu, titik Baru, lalu klik Project.
    2. Dalam Proyek baru kotak dialog, klik Visual C# proyek di bawah Jenis proyek, lalu klik Aplikasi Windows di bawah Pola acu. Secara default, Form1 dibuat.

      Catatan Pada Visual Studio 2005, klik Visual C# di bawah Jenis proyek.
  2. Ikuti langkah-langkah ini untuk menambahkan kontrol yang dibuat dalam Membuat kontrol ListView warisan bagian untuk aplikasi Windows Anda:
    1. Pada Alat menu, klik Menyesuaikan Toolbox.
    2. Pada .NET Framework komponen tab, klik People.
    3. Dalam Terbuka kotak dialog, Cari kontrol yang dibuat dalam Membuat kontrol ListView warisan bagian, dan kemudian klik Terbuka. Ini menambah kontrol ini Toolbox sehingga Anda dapat menggunakan kontrol sama untuk kontrol lain.
    4. Tarik MyListView dari General bagian dari peralatan untuk Form1.
  3. Tarik ComboBox kontrol dari Windows Forms bagian dari peralatan untuk Form1.
  4. Di jendela Properties ComboBox, mengubah Nama properti untuk cbListViewCombo, dan kemudian menetapkan Terlihat properti untuk Palsu.
  5. Tambahkan kode berikut untuk kelas Form1 di atas konstruktor:
    private ListViewItem lvItem;
    					
  6. Tambahkan kode berikut untuk Beban acara Form1:
    // Add a few items to the combo box list.
    this.cbListViewCombo.Items.Add("NC");
    this.cbListViewCombo.Items.Add("WA");
    
    // Set view of ListView to Details.
    this.myListView1.View = View.Details;
    
    // Turn on full row select.
    this.myListView1.FullRowSelect = true;
    			
    // Add data to the ListView.
    ColumnHeader columnheader;
    ListViewItem listviewitem;
    
    // Create sample ListView data.
    listviewitem = new ListViewItem("NC");
    listviewitem.SubItems.Add("North Carolina");
    this.myListView1.Items.Add(listviewitem);
    
    listviewitem = new ListViewItem("WA");
    listviewitem.SubItems.Add("Washington");
    this.myListView1.Items.Add(listviewitem);
                
    // Create column headers for the data.
    columnheader = new ColumnHeader();
    columnheader.Text = "State Abbr.";
    this.myListView1.Columns.Add(columnheader);
    
    columnheader = new ColumnHeader();
    columnheader.Text = "State";
    this.myListView1.Columns.Add(columnheader);
    
    // Loop through and size each column header to fit the column header text.
    foreach (ColumnHeader ch in this.myListView1.Columns)
    {			
       ch.Width = -2;
    }
    					
  7. Tambahkan kode berikut untuk SelectedValueChanged peristiwa ComboBox:
    // Set text of ListView item to match the ComboBox.
    lvItem.Text = this.cbListViewCombo.Text;
    		
    // Hide the ComboBox.
    this.cbListViewCombo.Visible = false;
    					
  8. Tambahkan kode berikut untuk Meninggalkan peristiwa ComboBox:
    // Set text of ListView item to match the ComboBox.
    lvItem.Text = this.cbListViewCombo.Text;
    
    // Hide the ComboBox.
    this.cbListViewCombo.Visible = false;
    					
  9. Tambahkan kode berikut untuk Menekan tombol peristiwa ComboBox:
    // Verify that the user presses ESC.
    switch (e.KeyChar)
    {
       case (char)(int)Keys.Escape:
       {
          // Reset the original text value, and then hide the ComboBox.
          this.cbListViewCombo.Text = lvItem.Text;
          this.cbListViewCombo.Visible = false;
          break;
       }
    
       case (char)(int)Keys.Enter:
       {		
          // Hide the ComboBox.
          this.cbListViewCombo.Visible = false;
          break;
       }
    }
    					
  10. Tambahkan kode berikut untuk MouseUp peristiwa myListView1:
    // Get the item on the row that is clicked.
    lvItem = this.myListView1.GetItemAt(e.X, e.Y);
    
    // Make sure that an item is clicked.
    if (lvItem != null)
    {
       // Get the bounds of the item that is clicked.
       Rectangle ClickedItem = lvItem.Bounds;
    
       // Verify that the column is completely scrolled off to the left.
       if ((ClickedItem.Left + this.myListView1.Columns[0].Width) < 0)
       {
          // If the cell is out of view to the left, do nothing.
          return;
       }
    
       // Verify that the column is partially scrolled off to the left.
       else if (ClickedItem.Left < 0)
       {
          // Determine if column extends beyond right side of ListView.
          if ((ClickedItem.Left + this.myListView1.Columns[0].Width) > this.myListView1.Width)
          {
             // Set width of column to match width of ListView.
             ClickedItem.Width = this.myListView1.Width;
             ClickedItem.X = 0;
          }
          else
          {
             // Right side of cell is in view.
             ClickedItem.Width = this.myListView1.Columns[0].Width + ClickedItem.Left;
             ClickedItem.X = 2;
          }					
       }
       else if (this.myListView1.Columns[0].Width > this.myListView1.Width)
       {
          ClickedItem.Width = this.myListView1.Width;
       }
       else
       {
          ClickedItem.Width = this.myListView1.Columns[0].Width;
          ClickedItem.X = 2;
       }				
    
       // Adjust the top to account for the location of the ListView.
       ClickedItem.Y += this.myListView1.Top;
       ClickedItem.X += this.myListView1.Left;	
    				
       // Assign calculated bounds to the ComboBox.
       this.cbListViewCombo.Bounds = ClickedItem;
    			
       // Set default text for ComboBox to match the item that is clicked.
       this.cbListViewCombo.Text = lvItem.Text;
    
       // Display the ComboBox, and make sure that it is on top with focus.
       this.cbListViewCombo.Visible = true;
       this.cbListViewCombo.BringToFront();
       this.cbListViewCombo.Focus();
    }
    					

Memverifikasi bahwa ia bekerja

  1. Simpan dan menjalankan sampel.
  2. Klik baris dalam ListView. Perhatikan bahwa kotak kombo muncul atas lokasi kolom pertama baris saat ini.
  3. Untuk menyembunyikan combo box, klik item dalam kotak kombo, tekan ESC dan kemudian menggulir melalui ListView atau klik kontrol lain. Perhatikan bahwa nilai yang Anda mengklik pada kotak kombo ditempatkan di kolom pertama baris diklik ListView.

Properti

ID Artikel: 320344 - Kajian Terakhir: 26 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
Kata kunci: 
kbhowtomaster kbmt KB320344 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:320344

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com