尽管有许多类似的问题,我仍无法找到答案。我想做的是这样的:
我有一个带有一些文本的文本框和几个带有图片的图片框。如果我执行从图片到文本框的拖放操作,则应在进行拖放时将光标插入到文本框内光标所在的位置(即发生mouseup事件的位置)。
第一部分很好:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
// Create custom text ...
pictureBox1.DoDragDrop("Some custom text", DragDropEffects.Copy);
}
private void textBox1_DragEnter(object sender, DragEventArgs e) {
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
我的问题是如何定义放置文本的位置:
private void textBox1_DragDrop(object sender, DragEventArgs e) {
textBox1.Text.Insert(CORRECT_POSITION, e.Data.GetData(DataFormats.Text).ToString());
}
有什么建议?
编辑:我试图用GetCharIndexFromPosition()获得正确的位置,但是它似乎没有返回正确的位置。以下代码确实返回了字符位置,但是我不知道它是从哪里获取的。显然,它并不代表光标的位置。
private void textBox1_DragDrop(object sender, DragEventArgs e) {
TextBox textBox1 = (TextBox)sender;
System.Drawing.Point position = new System.Drawing.Point(e.X, e.Y);
int index = textBox1.GetCharIndexFromPosition(position);
MessageBox.Show(index.ToString());
}
您需要将当前鼠标位置转换为TextBox中的客户坐标。另外,您可以在DragOver()事件中移动插入点,以便用户可以看到将文本插入到的位置:
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
pictureBox1.DoDragDrop("duck", DragDropEffects.Copy);
}
}
void textBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.All;
else
e.Effect = DragDropEffects.None;
}
void textBox1_DragOver(object sender, DragEventArgs e)
{
int index = textBox1.GetCharIndexFromPosition(textBox1.PointToClient(Cursor.Position));
textBox1.SelectionStart = index;
textBox1.SelectionLength = 0;
}
void textBox1_DragDrop(object sender, DragEventArgs e)
{
string txt = e.Data.GetData(DataFormats.Text).ToString();
int index = textBox1.GetCharIndexFromPosition(textBox1.PointToClient(Cursor.Position));
textBox1.SelectionStart = index;
textBox1.SelectionLength = 0;
textBox1.SelectedText = txt;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句