Lebih
Menemukan node diklik di bawah menu konteks
Bagaimana saya bisa mengetahui node dalam tree daftar menu konteks telah diaktifkan? Misalnya mengklik kanan node dan memilih opsi dari menu.
Saya dapat't menggunakan TreeViews' SelectedNode
properti karena node hanya benar-diklik dan tidak dipilih.
68
9
Anda dapat menambahkan klik mouse acara untuk TreeView, maka pilih node benar menggunakan GetNodeAt diberikan mouse koordinat yang diberikan oleh MouseEventArgs.
Berikut ini adalah solusi saya. Menempatkan baris ini ke NodeMouseClick acara TreeView:
Saya menemukan standar windows treeview perilaku pemilihan perilaku yang akan cukup mengganggu. Misalnya, jika anda menggunakan Explorer dan klik kanan pada node dan tekan Properties, menyoroti node dan menunjukkan kotak dialog properties untuk node yang anda klik. Tapi ketika anda kembali dari dialog, yang disorot node adalah node sebelumnya dipilih/disorot sebelum anda melakukan klik-kanan. Saya menemukan hal ini menyebabkan masalah kegunaan karena saya selamanya menjadi bingung apakah saya bertindak pada node yang tepat.
Jadi dalam banyak dari kita Gui, kita mengubah pohon yang dipilih node pada klik-kanan sehingga tidak ada kebingungan. Ini mungkin tidak sama sebagai standar iwndos aplikasi seperti Explorer (dan saya cenderung sangat model kami GUI perilaku setelah standar jendela aplikasi untuk usabiltiy alasan), saya percaya bahwa ini satu pengecualian kasus hasil yang jauh lebih bermanfaat pohon.
Berikut adalah beberapa kode yang mengubah pilihan pada klik kanan:
Menghidupkan kembali pertanyaan ini karena saya menemukan ini menjadi solusi yang jauh lebih baik. Saya menggunakan
NodeMouseClick
acara bukan.Ini adalah pertanyaan kuno, tapi aku masih menemukan itu berguna. Saya menggunakan kombinasi dari beberapa jawaban di atas, karena aku don't ingin mengklik kanan node untuk menjadi selectedNode. Jika saya memiliki akar node yang dipilih dan ingin menghapus salah satu dari itu's anak-anak, saya don't ingin anak-anak yang dipilih ketika saya menghapus itu (saya juga melakukan beberapa pekerjaan pada selectedNode bahwa saya don't ingin terjadi pada klik-kanan). Berikut ini adalah kontribusi saya:
Mirip dengan Marcus' jawaban, ini adalah solusi yang saya temukan bekerja untuk saya:
Anda tidak perlu menampilkan menu konteks diri sendiri jika anda menetapkan ke individu masing-masing node seperti:
Kemudian di dalam ContextMenu's acara Pembukaan, TreeView.SelectedNode properti akan mencerminkan simpul benar.
Berikut adalah bagaimana saya melakukannya.
Jika anda ingin menu konteks akan tergantung pada item yang dipilih anda're langkah terbaik menurut saya adalah menggunakan Jonesinator's kode untuk memilih item diklik. Menu konteks anda isi kemudian dapat tergantung pada item yang dipilih.
Memilih item pertama sebagai lawan hanya menggunakan itu untuk menu konteks memberikan beberapa keuntungan. Yang pertama adalah bahwa pengguna memiliki indikasi visual seperti yang ia diklik dan dengan demikian yang item menu terkait dengan. Yang kedua adalah bahwa cara ini's jauh lebih mudah untuk tetap kompatibel dengan metode lain untuk memunculkan menu konteks (misalnya shortcut keyboard).
Pilihan lain anda bisa berjalan dengan lebih untuk memiliki sebuah variabel global yang memiliki node yang dipilih. Anda hanya akan perlu untuk menggunakan
TreeNodeMouseClickEventArgs
.Sekarang anda memiliki akses ke simpul tersebut dan itu's properties.