Anda sedang offline saat ini, menunggu internet Anda untuk menyambung kembali

Cara menggunakan kontrol ComboBox untuk mengedit data dalam kontrol ListView dalam Visual Basic 2005 atau Visual Basic.NET

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:320342
Microsoft Visual C# 2005 dan Microsoft Visual C#.NET versi artikel ini, lihat 320344.
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 membiarkan pengguna 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 2005 atau Microsoft Visual Studio.NET.
  2. Pada Berkas menu, titik Baru, lalu klik Project.
  3. Dalam Proyek baru kotak dialog, klik Proyek-proyek Visual Basic di bawah Jenis proyek, lalu klik Windows Control perpustakaan di bawah Pola acu.

    Catatan Pada Visual Studio 2005, klik Visual Basic Melainkan Proyek-proyek Visual Basic.
  4. Mengganti semua kode di UserControl kelas dengan kode berikut.
    Imports SystemImports System.CollectionsImports System.ComponentModelImports System.DrawingImports System.DataImports System.Windows.FormsPublic Class MyListView    Inherits System.Windows.Forms.ListView#Region " Windows Form Designer generated code "    Public Sub New()        MyBase.New()        'This call is required by the Windows Form Designer.        InitializeComponent()        'Add any initialization after the InitializeComponent() call    End Sub    'UserControl1 overrides dispose to clean up the component list.    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)        If disposing Then            If Not (components Is Nothing) Then                components.Dispose()            End If        End If        MyBase.Dispose(disposing)    End Sub    'Required by the Windows Form Designer    Private components As System.ComponentModel.IContainer    'NOTE: The following procedure is required by the Windows Form Designer    'It can be modified using the Windows Form Designer.      'Do not modify it using the code editor.    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()        components = New System.ComponentModel.Container()    End Sub#End Region    Private Const WM_HSCROLL As Integer = &H114    Private Const WM_VSCROLL As Integer = &H115    Protected Overrides Sub WndProc(ByRef msg As Message)        ' Look for the WM_VSCROLL or the WM_HSCROLL messages.        If ((msg.Msg = WM_VSCROLL) Or (msg.Msg = WM_HSCROLL)) Then            ' Move focus to the ListView to cause ComboBox to lose focus.            Me.Focus()        End If        ' Pass message to default handler.        MyBase.WndProc(msg)    End SubEnd Class					
  5. Simpan dan kemudian membangun proyek.

Membuat contoh aplikasi

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

      Catatan Pada Visual Studio 2005, klik Visual Basic Melainkan Proyek-proyek Visual Basic.

      CatatanAnda harus mengubah kode pada Visual Basic 2005. Secara default, Visual Basic menciptakan dua file untuk proyek ketika Anda membuat proyek Windows Forms. Jika bentuk bernama Form1, dua file yang mewakili bentuk yang bernama Form1.vb dan Form1.Designer.vb. Anda menulis kode dalam Form1.vb file. Windows Forms Designer menulis kode dalam Form1.Designer.vb file. Windows Forms Designer menggunakan kata kunci parsial untuk membagi pelaksanaan Form1 menjadi dua file terpisah. Perilaku ini mencegah kode yang dihasilkan desainer yang diselingi dengan kode Anda.

      Untuk informasi lebih lanjut tentang tambahan bahasa Visual Basic 2005 baru, kunjungi Web site Microsoft Developer Network (MSDN) berikut: Untuk informasi lebih lanjut tentang kelas parsial dan desainer bentuk Windows, kunjungi Website MSDN berikut:
  2. Ikuti langkah-langkah ini untuk menambahkan kontrol yang Anda buat di "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 Anda buat di "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 sebelum "Windows Form Designer dihasilkan kode" bagian:
    Private lvItem As ListViewItem					
  6. Tambahkan kode berikut untuk Beban acara Form1.
    ' Add a few items to the combo box list.Me.cbListViewCombo.Items.Add("NC")Me.cbListViewCombo.Items.Add("WA")' Set view of ListView to Details.Me.MyListView1.View = View.Details' Turn on full row select.Me.MyListView1.FullRowSelect = True' Add some data to the ListView.Dim columnheader As ColumnHeaderDim lviewitem As ListViewItem' Create sample ListView data.lviewitem = New ListViewItem("NC")lviewitem.SubItems.Add("North Carolina")Me.MyListView1.Items.Add(lviewitem)lviewitem = New ListViewItem("WA")lviewitem.SubItems.Add("Washington")Me.MyListView1.Items.Add(lviewitem)' Create column headers for the data.columnheader = New ColumnHeader()columnheader.Text = "State Abbr."Me.MyListView1.Columns.Add(columnheader)columnheader = New ColumnHeader()columnheader.Text = "State"Me.MyListView1.Columns.Add(columnheader)' Loop through and size each column header to fit the column header text.Dim ch As ColumnHeaderFor Each ch In Me.MyListView1.Columns   ch.Width = -2Next					
  7. Tambahkan kode berikut untuk SelectedValueChanged peristiwa ComboBox kontrol.
    ' Set text of ListView item to match the ComboBox.lvItem.Text = Me.cbListViewCombo.Text' Hide the ComboBox.Me.cbListViewCombo.Visible = False					
  8. Tambahkan kode berikut untuk Meninggalkan peristiwa ComboBox kontrol.
    ' Set text of ListView item to match the ComboBox.lvItem.Text = Me.cbListViewCombo.Text' Hide the ComboBox.Me.cbListViewCombo.Visible = False					
  9. Tambahkan kode berikut untuk Menekan tombol peristiwa ComboBox kontrol.
    ' Verify that the user presses ESC.Select Case (e.KeyChar)   Case ChrW(CType(Keys.Escape, Integer))      ' Reset the original text value, and then hide the ComboBox.      Me.cbListViewCombo.Text = lvItem.Text      Me.cbListViewCombo.Visible = False   Case ChrW(CType(Keys.Enter, Integer))      ' Hide the ComboBox.      Me.cbListViewCombo.Visible = FalseEnd Select					
  10. Tambahkan kode berikut untuk MouseUp peristiwa myListView1.
    ' Get the item on the row that is clicked.lvItem = Me.MyListView1.GetItemAt(e.X, e.Y)' Make sure that an item is clicked.If Not (lvItem Is Nothing) Then   ' Get the bounds of the item that is clicked.   Dim ClickedItem As Rectangle = lvItem.Bounds   ' Verify that the column is completely scrolled off to the left.   If ((ClickedItem.Left + Me.MyListView1.Columns(0).Width) < 0) Then      ' If the cell is out of view to the left, do nothing.      Return   ' Verify that the column is partially scrolled off to the left.   ElseIf (ClickedItem.Left < 0) Then      ' Determine if column extends beyond right side of ListView.      If ((ClickedItem.Left + Me.MyListView1.Columns(0).Width) > Me.MyListView1.Width) Then                            ' Set width of column to match width of ListView.         ClickedItem.Width = Me.MyListView1.Width         ClickedItem.X = 0      Else         ' Right side of cell is in view.         ClickedItem.Width = Me.MyListView1.Columns(0).Width + ClickedItem.Left         ClickedItem.X = 2      End If   ElseIf (Me.MyListView1.Columns(0).Width > Me.MyListView1.Width) Then      ClickedItem.Width = Me.MyListView1.Width     Else      ClickedItem.Width = Me.MyListView1.Columns(0).Width      ClickedItem.X = 2   End If   ' Adjust the top to account for the location of the ListView.   ClickedItem.Y += Me.MyListView1.Top   ClickedItem.X += Me.MyListView1.Left   ' Assign calculated bounds to the ComboBox.   Me.cbListViewCombo.Bounds = ClickedItem   ' Set default text for ComboBox to match the item that is clicked.   Me.cbListViewCombo.Text = lvItem.Text   ' Display the ComboBox, and make sure that it is on top with focus.   Me.cbListViewCombo.Visible = True   Me.cbListViewCombo.BringToFront()   Me.cbListViewCombo.Focus()End If					

Memverifikasi bahwa ia bekerja

  1. Simpan dan kemudian menjalankan sampel.
  2. Klik baris dalam ListView kontrol. 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 mengendalikan atau klik kontrol lain. Perhatikan bahwa nilai yang Anda mengklik pada kotak kombo ditempatkan di kolom pertama baris diklik ListView kontrol.

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 320342 - Tinjauan Terakhir: 09/26/2011 14:28:00 - Revisi: 1.0

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB320342 KbMtid
Tanggapan