1

私は ListView から継承している MyClass という単一のクラスを持っています...基本的にはリストビューであり、フォームなどで使用できます..このクラスのドラッグアンドドロップイベントをオーバーライドしたので、2 つ置くとフォーム上のこれらのコントロールの 1 つから別の項目にドラッグすると、問題なく実行されます。私の問題は DoubleClick にあります。このクラスに DoubleClick() を実装するにはどうすればよいですか? 後でフォームにこれらのコントロールを 2 つ配置し、そのうちの 1 つの項目をダブルクリックすると、もう一方のコントロールに移動します...それは可能ですか?

4

3 に答える 3

2

どうやったら実現できるのか気になったのでやってみました。新しい Windows フォーム プロジェクトを作成し、myClass:ListView を作成しました (以下のコードを参照)。次に、フォームにコントロールを 2 つ追加し、姉妹プロパティを使用してそれらを結び付けました (実際にはプロパティとして記述しませんでした)。

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% 確信が持てませんが (テストしていません)、一般的な手法で十分に機能するはずです。もちろん、null チェックParentが必要であり、これらの詳細を MouseDoubleClick に貼り付ける必要がありますが、問題なく動作するはずです。

于 2012-05-22T17:27:21.600 に答える