不行啊!这样拖放过去是放在原来光标的位置上,不是鼠标松开的那个地方!formulaTextBox.Text = e.Data.GetData(DataFormats.Text).ToString();
formulaTextBox.SelectedText = e.Data.GetData(DataFormats.Text).ToString();
上面这两句肯定不对!因该怎么写?
formulaTextBox.SelectedText = e.Data.GetData(DataFormats.Text).ToString();
上面这两句肯定不对!因该怎么写?
formulaTextBox.SelectedText = e.Data.GetData(DataFormats.Text).ToString();
就可以了。
界面有两个控件: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的各参数,不要改变!
{
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;
}