不行啊!这样拖放过去是放在原来光标的位置上,不是鼠标松开的那个地方!formulaTextBox.Text = e.Data.GetData(DataFormats.Text).ToString();
formulaTextBox.SelectedText = e.Data.GetData(DataFormats.Text).ToString();
上面这两句肯定不对!因该怎么写?

解决方案 »

  1.   

    先用API函数SendMessage发送WM_MouseDown过去让光标定位到当前鼠标位置然后再使用
    formulaTextBox.SelectedText = e.Data.GetData(DataFormats.Text).ToString();
    就可以了。
      

  2.   

    我帮你做了个小程序,效果比较理想,界面元素如下:
    界面有两个控件:textBox1,Label1
    两个私有变量 isDrag,DragText
    四个事件
    一个API函数
    using System.Diagnostics ;
    using System.Runtime.InteropServices ;
    private bool isDrag =false;
    private string DragText ;private void textBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
    this.isDrag = true;
    this.DragText = e.Data.GetData(DataFormats.Text).ToString();
    Point p = this.textBox1.PointToClient(new Point(e.X ,e.Y ));
    int x=p.X ;
    int y=p.Y;
    long xy=((long) (((short) (x)) | ((short) (y)) << 16)) ;

    Form1.PostMessage(this.textBox1.Handle ,513,new IntPtr(1) ,new IntPtr(xy));
    Form1.PostMessage(this.textBox1.Handle ,514,new IntPtr(1) ,new IntPtr(xy));

    }private void textBox1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
    {
    e.Effect = DragDropEffects.Copy ; }private void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    label1.DoDragDrop( ((Label)sender).Text.Trim() ,DragDropEffects.Copy );
    }

    [DllImport("user32.dll")]
    public static extern bool PostMessage(IntPtr hWnd,int Msg,IntPtr wParam,IntPtr lParam);
    private void textBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if (this.isDrag )
    {
    this.isDrag = false;

    this.textBox1.SelectedText = this.DragText ;
    }
    }
    注意:Api的各参数,不要改变!
      

  3.   

    我在程序中是这样实现的:private void mainForm_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    {
    if (e.Data.GetData(DataFormats.FileDrop) !=null)
    {
    e.Effect = DragDropEffects.Copy;
    }
    }private void mainForm_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
    String[] fileNames = (String[]) e.Data.GetData(DataFormats.FileDrop);
    int j = listBox1.Items.Count + 1;
    for (int i=0;i<fileNames.Length;i++)
    {
    listBox1.Items.Add(String.Format("{0:D3} ",i+j) + fileNames[i]);
    }
    menuDelAll.Enabled = true;
    menuPlay.Enabled = true;
    }