Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Richtextbox的C#Dragdrop事件未触发_C#_Drag And Drop_Richtextbox - Fatal编程技术网

Richtextbox的C#Dragdrop事件未触发

Richtextbox的C#Dragdrop事件未触发,c#,drag-and-drop,richtextbox,C#,Drag And Drop,Richtextbox,我正在构建一个简单的表单,其中只有一个面板和两个富文本框,唯一的功能是允许用户在两个富文本框之间拖放文本 代码如下: using System; using System.Windows.Forms; namespace Exmaple { class PanelForm : Form { private RichTextBox rtb1, rtb2; public PanelForm() { this.

我正在构建一个简单的表单,其中只有一个面板和两个富文本框,唯一的功能是允许用户在两个富文本框之间拖放文本

代码如下:

using System;
using System.Windows.Forms;

namespace Exmaple
{
    class PanelForm : Form
    {
        private RichTextBox rtb1, rtb2;

        public PanelForm()
        {
            this.rtb1 = new RichTextBox();
            this.rtb2 = new RichTextBox();

            this.rtb1.AllowDrop = true;
            this.rtb2.AllowDrop = true;
            //this.rtb1.DragEnter += new DragEventHandler(this.rtb_DragEnter);
            //this.rtb1.DragDrop += new DragEventHandler(this.rtb1_DragDrop);
            this.rtb2.DragEnter += new DragEventHandler(this.rtb_DragEnter);
            this.rtb2.DragDrop += new DragEventHandler(this.rtb2_DragDrop);
            this.rtb2.DragOver += new DragEventHandler(this.rtb_DragOver);

            Panel panel = new Panel();

            panel.Controls.Add(rtb1);
            panel.Controls.Add(rtb2);
            this.Controls.Add(panel);

            this.rtb1.Dock = DockStyle.Left;
            this.rtb2.Dock = DockStyle.Right;
            panel.Dock = DockStyle.Fill;

            this.Text = "Panel Form";
            this.Width = 600;
            this.Height = 300;
        }

        private void rtb_DragEnter(object sender, DragEventArgs args)
        {
            if (args.Data.GetDataPresent(DataFormats.Rtf))
            {
                args.Effect = DragDropEffects.Copy;
            }
            else
            {
                args.Effect = DragDropEffects.None;
            }
        }

        private void rtb_DragOver(object sender, DragEventArgs args)
        {
            if (args.Data.GetDataPresent(DataFormats.Rtf))
            {
                args.Effect = DragDropEffects.Copy;
            }
            else
            {
                args.Effect = DragDropEffects.None;
            }
        }

        private void rtb1_DragDrop(object sender, DragEventArgs args)
        {
            this.rtb1.SelectedRtf = args.Data.GetData(DataFormats.Rtf).ToString();
        }

        private void rtb2_DragDrop(object sender, DragEventArgs args)
        {
            this.rtb2.SelectedRtf = args.Data.GetData(DataFormats.Rtf).ToString();
        }
    }
}
问题是,rtb_DragEnter事件被触发,但rtb2_DragDrop未被触发。allowDrop属性设置为true,在rtb_DragEnter事件中,DragDropEffects设置为Copy。还有一件事,光标是负号,为什么

平台是win7,我使用VS2010和.NET版本4


欢迎任何人提出任何意见或建议

RTB做D+D的方式不同。将他们的EnableAutoDragDrop设置为true并删除所有其他内容。@HansPassant非常感谢!问题解决了!!!但rtb处理D+D的方式不同,这很奇怪。在官方的msdn网站上也有一个关于RTBD+D的例子,它使用的是正常的方式(这不起作用)。顺便说一句,这个自动拖动程序将从源代码中删除文本,是否可以复制文本?在拖放时按住CTRL键。@HansPassant再次感谢!似乎还有很多技术人员在后面,我还不知道。我已经在Qt中编程了一段时间,并且实现了D+D,这很容易。而在.NET下,事情似乎并不那么简单。(顺便说一句,我可以在评论中提到你的名字,但在回答的评论中不能提到拉尔斯泰克,这也很奇怪)RTB的D+D有不同之处。将他们的EnableAutoDragDrop设置为true并删除所有其他内容。@HansPassant非常感谢!问题解决了!!!但rtb处理D+D的方式不同,这很奇怪。在官方的msdn网站上也有一个关于RTBD+D的例子,它使用的是正常的方式(这不起作用)。顺便说一句,这个自动拖动程序将从源代码中删除文本,是否可以复制文本?在拖放时按住CTRL键。@HansPassant再次感谢!似乎还有很多技术人员在后面,我还不知道。我已经在Qt中编程了一段时间,并且实现了D+D,这很容易。而在.NET下,事情似乎并不那么简单。(顺便说一句,我可以在评论中看到你的名字,但在回答的评论中不能看到拉尔斯泰克,太奇怪了)