Eğer MouseDown
ve/veya ListView kontrolünün MouseDoubleClick
olayları işlemek ve fare eylem hedefini belirlemek için HitTest
yöntemi kullanırsanız, olmuştur hangi madde bilecek çift tıklanmış. Bu ayrıca, NO öğesinin tıklatılıp tıklanmadığını belirlemek için iyi bir yoldur (örneğin, kısmen doldurulmuş bir listede boş alana tıklamak.)
Aşağıdaki kod, tıklatılan öğeyi tek bir tıklatmayla bir metin kutusunda görüntüleyecektir ve çift tıklama varsa çift tıklanan öğenin adıyla bir mesaj kutusu açılacaktır
Bir öğenin, metin kutusunun veya iletinin doldurduğu liste görünümünün bir alanında tıklama veya çift tıklama oluşursa kutu aslında yopu bilgilendirmek.
Bu önemsiz bir örnektir ve ihtiyaçlarınıza bağlı olarak, bunu biraz uğraşmak zorunda kalacaktır.
UPDATE: Listenin boş bir alanı tıklandığında veya çift tıklandığında Liste Görünümü denetiminin SelectedItems özelliğini temizleyen bir kod ekledim.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listView1.MouseDown += new MouseEventHandler(listView1_MouseDown);
listView1.MouseDoubleClick += new MouseEventHandler(listView1_MouseDoubleClick);
this.Load += new EventHandler(Form1_Load);
}
void Form1_Load(object sender, EventArgs e)
{
this.SetupListview();
}
private void SetupListview()
{
ListView lv = this.listView1;
lv.View = View.List;
lv.Items.Add("John Lennon");
lv.Items.Add("Paul McCartney");
lv.Items.Add("George Harrison");
lv.Items.Add("Richard Starkey");
}
void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
ListViewHitTestInfo info = listView1.HitTest(e.X, e.Y);
ListViewItem item = info.Item;
if (item != null)
{
MessageBox.Show("The selected Item Name is: " + item.Text);
}
else
{
this.listView1.SelectedItems.Clear();
MessageBox.Show("No Item is selected");
}
}
void listView1_MouseDown(object sender, MouseEventArgs e)
{
ListViewHitTestInfo info = listView1.HitTest(e.X, e.Y);
ListViewItem item = info.Item;
if (item != null)
{
this.textBox1.Text = item.Text;
}
else
{
this.listView1.SelectedItems.Clear();
this.textBox1.Text = "No Item is Selected";
}
}
}
bu kodla (potansiyel) bir sorundur, ne olursa listesinin boş bir alanı kullanıcı tıkladığında veya çift tıklama? Bazı durumlarda, sonuç olarak en son seçilen öğenin hangisi olmasını isteyebilirler. Diğer durumlarda, kullanıcı, çift tıklama için bir öğeyi açıkça seçmedikçe hiçbir şeyin olmasını istemeyebilirler. – XIVSolutions
Görüyorum ki en azından biraz yanlışım. Kullanıcı boş bir alana çift tıklarsa DoubleClick etkinliği tetiklenmez. Çok kısa görüşlüyüm (diğer yöntemlerle kullanılmak üzere üye değişkeni ayarlayan farklı bir uygulama kullanıyordum, bu yüzden MouseDown Olayı kullanılarak hiçbir şeyin tıklanmadığı durumu ele almak gerekiyordu). – XIVSolutions
Bu kod, bir satırdaki onay kutusunu çift tıklattığınızda sorun var. – confusedMind