Richtextbox拖放与表单拖放不同

所以我有一个richtextbox和一个表单,并附加了一个拖放输入和放下事件。我已经确定它们的代码完全相同,但是由于某些原因,richtextbox事件激活了Text Changed事件。表单也将激活文本更改事件,但是我从阻止它的拖动事件调用的方法中有一个变量。我试图以另一种形式重现它,但是主要的缺点是表单拖放事件的代码与richtextbox拖放事件完全相同。它们怎么可能不同?这是放置代码:

    private void TestBox_DragEnter(object sender,DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop))
                    e.Effect = DragDropEffects.Copy;
            }
    private async void TestBox_DragDrop(object sender,DragEventArgs e)
            {
                string filePath = ((string[])e.Data.GetData(DataFormats.FileDrop))[0];
                await AsyncStuff();
            }
    private async Task AsyncStuff() 
    {
        block = true;
        await OtherAsyncMethodThatactivatesTextChanged();
        block = false;
    }
        private bool block;
        private void TestBox_TextChanged(object sender,EventArgs e) 
        {
            if (block) return;
            MessageBox.Show("Text Changed called"); //activates on the richtextbox drag,doesn't on the form
        }

我现在可以复制它,这是代码。我附加了表单拖放并通过设计器输入事件。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            richTextBox1.AllowDrop = true;
            richTextBox1.TextChanged += TestBox_TextChanged;
            richTextBox1.DragDrop += TestBox_DragDrop;
            richTextBox1.DragEnter += TestBox_DragEnter;
            AllowDrop = true;
        }
        private void TestBox_DragEnter(object sender,DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                e.Effect = DragDropEffects.Copy;
        }
        private async void TestBox_DragDrop(object sender,DragEventArgs e)
        {
            string filePath = ((string[])e.Data.GetData(DataFormats.FileDrop))[0];
            await AsyncStuff();
        }
        private async Task AsyncStuff()
        {
            block = true;
            richTextBox1.AppendText("asd");
            block = false;
        }
        private bool block;
        private void TestBox_TextChanged(object sender,EventArgs e)
        {
            if (block) return;
            MessageBox.Show("Text Changed called"); //activates on the richtextbox drag,doesn't on the form
        }

        private async void Form1_DragDrop(object sender,DragEventArgs e)
        {
            string filePath = ((string[])e.Data.GetData(DataFormats.FileDrop))[0];
            await AsyncStuff();
        }

        private void Form1_DragEnter(object sender,DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                e.Effect = DragDropEffects.Copy;
        }
    }
as25863066 回答:Richtextbox拖放与表单拖放不同

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2832446.html

大家都在问