2016-10-27 50 views
1

每当将标签拖放到文本框内时,我都希望将文本添加到文本框中,到目前为止,我已使用下面的方法完成了该操作。考虑我已经在文本框中有一些文本,现在当我放下标签时,它添加了文本结束,我明白这是因为我添加了textbox = textbox + labelcontents。使用C拖放标签文本到文本框中#

是否有任何其他方式,将文本添加到删除相同的位置,并且所有以前的文本保持不变。我们可以使用位置点吗?

在表单中默认的构造函数:

lblBreakStartTime.MouseDown += new MouseEventHandler(lblBreakStartTime_MouseDown);  
txtBoxDefaultEnglish.AllowDrop = true; 
txtBoxDefaultEnglish.DragEnter += new DragEventHandler(txtBoxDefaultEnglish_DragEnter); 
txtBoxDefaultEnglish.DragDrop += new DragEventHandler(txtBoxDefaultEnglish_DragDrop); 

鼠标按下事件的标签,该标签将被丢弃:

private void lblBreakStartTime_MouseDown(object sender, MouseEventArgs e) 
     { 
      DoDragDrop("START_TIME", DragDropEffects.Copy); 
     } 

文本框的事件:

private void txtBoxDefaultEnglish_DragEnter(object sender, DragEventArgs e) 
     { 
      if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy; 
     } 
     private void txtBoxDefaultEnglish_DragDrop(object sender, DragEventArgs e) 
     { 

     txtBoxDefaultEnglish.Text = txtBoxDefaultEnglish.Text + " " + "[" + (string)e.Data.GetData(DataFormats.Text) + "]"; 
     txtBoxDefaultEnglish.SelectionStart = txtBoxDefaultEnglish.Text.Length; 
    } 
+0

刚刚找到解决方案,其非常简单,我只需要使用光标位置。 'int CursorPos = txtBoxDefaultEnglish.SelectionStart;''txtBoxDefaultEnglish.Text = txtBoxDefaultEnglish.Text.Insert(CursorPos,“[”+(string)e.Data.GetData(DataFormats.Text)+“]”);' –

+0

作为回答并请接受。也许对别人有帮助;) – Sebi

+0

@Nisar,你可以在光标位置插入你的文本,但不能在放置位置 –

回答

1

试试这个:

private void txtBoxDefaultEnglish_DragDrop(object sender, DragEventArgs e) 
{ 
    //Get index from dropped location 
    int selectionIndex = txtBoxDefaultEnglish.GetCharIndexFromPosition(txtBoxDefaultEnglish.PointToClient(new Point(e.X, e.Y))); 
    string textToInsert = string.Format(" [{0}]", (string)e.Data.GetData(DataFormats.Text)); 
    txtBoxDefaultEnglish.Text = txtBoxDefaultEnglish.Text.Insert(selectionIndex, textToInsert); 
    txtBoxDefaultEnglish.SelectionStart = txtBoxDefaultEnglish.Text.Length; 

    //Set cursor start position 
    txtBoxDefaultEnglish.SelectionStart = selectionIndex; 
    //Set selction length to zero 
    txtBoxDefaultEnglish.SelectionLength = 0; 
} 
+0

它是一个很好的解决方案,一件小事,如果我们在文本之间放置标签,它会移动光标到结束的文本框。我们如何在插入后将光标保持在位置,而不是将其移动到完整行的末尾。我希望你明白我的观点。 –

+0

查看我的更新回答:) –