1

我有一个名为 MyClass 的类,它继承自 ListView...所以基本上它是一个列表视图,我可以在表单等上使用它。我已经覆盖了这个类的拖放事件,所以现在如果我放两个表单上的这些控件并将项目从一个拖动到另一个,它会做得很好。我的问题是 DoubleClick,如何在此类上实现 DoubleClick()?因此,当后来我将其中两个控件放在一个表单上并双击其中一个上的一个项目时,它会将其移动到另一个控件...甚至可能吗?

4

3 回答 3

2

我很好奇这是如何实现的,所以我尝试了一下。我创建了一个新的 Windows 窗体项目并创建了一个 myClass:ListView(请参见下面的代码)然后我将两个 if 控件添加到窗体,并使用姊妹属性将它们绑定在一起(我并没有真正将其写为属性)

我在 myClass1 中添加了 1 个项目,在 myClass2 中添加了 2 个项目。当我双击它们中的任何一个时,它们会移动到另一个列表视图。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        myClass1.sister = myClass2;
        myClass2.sister = myClass1;
    }
}

public class myClass : ListView
{
    //This is where we will store the information about the sister Control
    private myClass _sister;
    //**EDIT**  I changed sister into a property and now it is selectable
    //from the designer.
    public myClass sister { get { return _sister; } set { _sister = value; } }

    public myClass()
    {
    }
    //here is where we override the OnDoubleCLick Event
    protected override void OnDoubleClick(EventArgs e)
    {
        //Make sure this control has a sister 
        if (sister != null)
        {
            //add a temporary storage location for the selected Item
            ListViewItem item = this.SelectedItems[0];
            //Remove the Item from the clicked List
            this.Items.Remove(item);
            //Add the Item to the sister List
            ((myClass)sister).Items.Add(item);
        }
        base.OnDoubleClick(e);
    }

}
于 2012-05-22T17:32:35.347 回答
1

你试过这个吗?:

private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        ListView source = sender as ListView;
        ListViewItem item =  source.HitTest(e.Location).Item;
        if (item != null)
        {
            MessageBox.Show("Item " + item.Text + " was double clicked on " + source.Name );
        }
    }

发件人会告诉您双击了哪个列表视图,并且由于您已经实现了拖放,我想您应该能够以相同的方式实现传输。

于 2012-05-22T17:27:05.543 回答
1

这可以通过访问Parent控件并通过它来实现Controls

var allMyClasses = this.Parent.Controls.OfType<MyClass>().ToList();

int index = allMyClasses.IndexOf(this);

MyClass target = null;
if (index == allMyClasses.Count - 1)
{
    target = allMyClasses[0];
}
else if (allMyClasses.Count != 0)
{
    target = allMyClasses[index + 1];
}

我不是 100% 确定确切的代码(未经测试),但一般技术应该工作得很好。当然,您需要对 进行空检查Parent,并且您需要将这些详细信息粘贴到 MouseDoubleClick 中,但它应该没有问题。

于 2012-05-22T17:27:21.600 回答