2013-03-15 52 views
0

我正在尝试将项目从列表框中拖放到文本框中。这对我来说可以。 现在,当我试图将第二个项目拖到同一个文本框中时,它将它追加到文本框中包含的最后一个文本。我想它应该粘贴在我拖动项目到文本框的位置。我用下面的代码到目前为止将文本插入到x,y坐标位置的文本框中

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); 
    } 

回答

1

我使用文本框不是文本编辑,试试这个代码

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); 
    } 
+0

它给了我一些逻辑来解决这个问题。我修改了一下你的解决方案,因为在textBox1.Text不是空字符串的情况下它会给出错误的结果。即当它进入你的代码的其他部分..但无论如何.. – 2013-03-15 08:40:41

相关问题