0

リストボックスからアイテムをドラッグしてテキストボックスに入れようとしています。それは私にとってはうまくいきます。2番目のアイテムを同じテキストボックスにドラッグしようとすると、テキストボックスに含まれる最後のテキストに追加されます。アイテムをテキストボックスにドラッグした位置に貼り付けたいです。私はこれまで次のコードを使用しています

private void Form1_Load(object sender, System.EventArgs e) {
        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0)
                listBoxControl1.Items.Add("Item " + i.ToString());
         }

 private void listBoxControl1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
        ListBoxControl c = sender as ListBoxControl;
        p = new Point(e.X, e.Y);
        int selectedIndex = c.IndexFromPoint(p);
        if (selectedIndex == -1)
            p = Point.Empty;
    }

    private void listBoxControl1_MouseMove(object sender,System.Windows.Forms.MouseEventArgs e) {
        if (e.Button == MouseButtons.Left)
            if ((p != Point.Empty) && ((Math.Abs(e.X - p.X) > 5) || (Math.Abs(e.Y - p.Y) > 5)))
                listBoxControl1.DoDragDrop(sender, DragDropEffects.Move);            
    }


    private void textEdit1_DragOver(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }

  private void textEdit1_DragDrop(object sender, DragEventArgs e)
    {
        TextEdit textBox1 = sender as TextEdit;
        Point newPoint = new Point(e.X, e.Y);
        newPoint = textBox1.PointToClient(newPoint);                          
        object item = listBoxControl1.Items[listBoxControl1.IndexFromPoint(p)];

        if (textBox1.Text == "")
        {
            textBox1.Text = item.ToString();
        }
        else
        {
            textBox1.Text = textBox1.Text + "," + item.ToString();
        }
        listBoxControl1.Items.Remove(item);
    }
4

1 に答える 1

1

私は TextBox ではなく TextEdit を使用しています。このコードを試してください

    private void textBox1_DragDrop(object sender, DragEventArgs e)
    {
        TextBox textBox1 = sender as TextBox;
        Point newPoint = new Point(e.X, e.Y);
        newPoint = textBox1.PointToClient(newPoint);
        int index = textBox1.GetCharIndexFromPosition(newPoint);

        object item = listBox1.Items[listBox1.IndexFromPoint(p)];

        if (textBox1.Text == "")
        {
            textBox1.Text = item.ToString();
        }
        else
        {
            var text = textBox1.Text;
            var lastCharPosition = textBox1.GetPositionFromCharIndex(index);
            if (lastCharPosition.X < newPoint.X)
            {
                text += item.ToString();
            }
            else
            {
                text = text.Insert(index, item.ToString());
            }

            textBox1.Text = text;
        }
        listBox1.Items.Remove(item);
    }
于 2013-03-15T07:27:03.737 に答える