RichTextBox DragDrop ведет себя странно - PullRequest
0 голосов
/ 08 января 2020

Хорошо, у меня есть richtextbox, и я хотел бы иметь возможность перетаскивать его. Внутри события перетаскивания я хотел бы выполнить код, который изменяет текст richtextbox, который, в свою очередь, активирует событие измененного текста. Однако я хочу, чтобы только часть кода внутри события измененного текста активировалась, поэтому у меня есть переменный блок, который при значении true этот код внутри события измененного текста не будет активирован. Вот оно:

public Form1()
        {
            InitializeComponent();
            richTextBox1.AllowDrop = true;
            richTextBox1.DragDrop += new DragEventHandler(rtbDragDrop);
            richTextBox1.DragEnter += new DragEventHandler(rtbDragEnter);
        }
        private bool block;
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            if (block) return;
            MessageBox.Show("Text Changed Called");
        }
        private void rtbDragDrop(object sender, DragEventArgs e)
        {
            block = true;
            richTextBox1.AppendText("hello");
            block = false;
        }
        private void rtbDragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                e.Effect = DragDropEffects.Copy;
        }

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            block = true;
            richTextBox1.AppendText("hello");
            block = false;
        }

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

Однако текст измененного кода все равно вызывается. Это связано с тем, что блок имеет значение false, прежде чем событие измененного текста может произойти по какой-либо причине. Однако, часть, которая смущает меня больше всего, - то, что перетаскивание FORM работает просто отлично (добавлено с дизайнером). Только перетаскивание richtextbox вызывает эту проблему. Почему?

1 Ответ

0 голосов
/ 08 января 2020

@ Джими нашел исправление. Для сброса блока используется BeginInvoke.

...