DoubleClick在ListView中排成一行

who*_*oah 13 .net c# winforms

是否有可能在ListView中获取doubleclicked行的值?我注册了一个活动:

    private void lvLista_DoubleClick(object sender, EventArgs e)
    {
        MessageBox.Show(lvLista.SelectedItems.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

但是在消息上,当我在listview中双击某一行时,我得到:

System.Windows.Forms.ListView + SelectedListViewItemCollection

更重要的是,我在listview中有2列:

    lvLista.Columns.Add("ID");
    lvLista.Columns.Add("Tilte");
Run Code Online (Sandbox Code Playgroud)

我想在messagebox中显示doubleclicked行的"ID".
怎么做?如何从此活动中获取价值?

XIV*_*ons 24

如果您处理ListView控件的MouseDown和/或MouseDoubleClick事件,并使用该HitTest方法确定鼠标操作的目标,您将知道双击了哪个项目.这也是确定是否单击了任何项目的好方法(例如,单击部分填充列表中的空白区域.

如果单击发生,以下代码将在文本框中显示单击的项目,如果发生双击,将弹出一个带有双击项目名称的消息框.

如果单击或双击发生在未由项填充的列表视图的区域中,则文本框或消息框会通知yopu该事实.

这是一个微不足道的例子,根据您的需要,您将不得不捣乱它.

更新:我添加了一些代码,当单击或双击列表的空白区域时,它会清除Listview控件的SelectedItems属性.

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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*kin 20

试试这个:

private void lvLista_DoubleClick(object sender, EventArgs e)
{

    MessageBox.Show(lvLista.SelectedItems[0].SubItems[0].Text);
}
Run Code Online (Sandbox Code Playgroud)

  • 此代码的(潜在)问题是,如果用户在列表的空白区域单击或双击会发生什么?在某些情况下,他们可能希望最后选择的项目作为结果。但是,在其他情况下,除非用户明确选择要双击的项目,否则他们可能不希望发生任何事情。 (2认同)

小智 6

我知道这个帖子很旧,但在我看来,这里没有人正确回答了这个问题。对于将来的人,请从MSDN尝试此操作:

this.myListView.Activation = System.Windows.Forms.ItemActivation.TwoClick;
this.myListView.ItemActivate += new 
System.EventHandler(this.myListView_ItemClick);
Run Code Online (Sandbox Code Playgroud)

  • 尽管这适用于双击,但如果通过两次截然不同的单击来单击该项目,该事件也会触发。 (3认同)