none
Перетаскивание данных в RichTextBox RRS feed

  • Вопрос

  • Требуется, чтобы в RichTextBox можно было мышью перетащить текст. Есть 2 обработчика событий

            private void createtext_DragEnter(object sender, DragEventArgs e)
            {
                if ((e.Data.GetDataPresent(DataFormats.Rtf)) || ((e.Data.GetDataPresent(DataFormats.StringFormat)) || (e.Data.GetDataPresent(DataFormats.Text))))
                {
                    e.Effect = DragDropEffects.Copy;
                }
                else
                {
                    e.Effect = DragDropEffects.None;
                }
            }
    
            private void createtext_DragDrop(object sender, DragEventArgs e)
            {
                if ((e.Data.GetDataPresent(DataFormats.Rtf)))
                {
                    richtext.SelectedRtf=(string)e.Data.GetData(DataFormats.Rtf);
                }
                else
                {
                    if ((e.Data.GetDataPresent(DataFormats.StringFormat) || (e.Data.GetDataPresent(DataFormats.Text))))
                    {
                        richtext.SelectedText = (string)e.Data.GetData(DataFormats.StringFormat);
                    }
                }
    
            }
    На них подписаны RichTextBox и контрол, в котором этот RichTextBox находится
    RichTextBox (с именем richtext) подписан так
                richtext.AllowDrop = true;
                richtext.DragDrop+=new DragEventHandler(createtext_DragDrop);
                richtext.DragEnter += new DragEventHandler(createtext_DragEnter);
    

    Однако когда я перетаскиваю текст на контрол, но не на RichTextBox, то всё работает корректно. Но если я перетаскиваю на RichTextBox, то он не принимает текст. Курсор как DragDropEffects.None, когда отпускаю кнопку мыши над RichTextBox, ничего не происходит. Причём если я тащу текст из текстового редактора (WordPad например) RichTextBox текст вставляет, но курсор мыши при этом, не такой, как я прописывал обработчике событий. А если я перетаскиваю текст из любого другого приложения (браузера или 2 запущенного экземпляра своего приложения), RichTextBox то не вставляет. А контрол, в котором RichTextBox находится принимает текст всегда.
    Как заставить RichTextBox работать корректно?
    • Перемещено Siddharth Chavan 1 октября 2010 г. 21:45 MSDN Forums Consolidation (От:Visual C#)
    1 марта 2010 г. 17:59

Ответы

  • ознакомтесь с этой статьей, для более полного контроля за драгндропом, вам необходимо реилизовать обработку еще нескольктй событий. (в часности отслеживать перемещение мыша и вызывать DoDragDrop)
    В этой статье также описывается драгдроп в ричтекстбокс
    еще пример
    запрос в поисковике типа "richtextbox dragdrop between applications" и его вариации дадут вам много материала для изучения
    • Помечено в качестве ответа I.Vorontsov 2 марта 2010 г. 7:50
    1 марта 2010 г. 19:45

Все ответы

  • Эта статья вам не поможет?

    1 марта 2010 г. 18:08
  • Эта статья вам не поможет?


    Примерно то-же сделано у меня. Разница только обработчике richTextBox1_DragDrop. Но ошибка судя по всему не в нём.
    1 марта 2010 г. 18:15
  • Добавь трассировку в DragEnter. или отладь.
    1 марта 2010 г. 18:27
  • Эта статья вам не поможет?


    Примерно то-же сделано у меня. Разница только обработчике richTextBox1_DragDrop. Но ошибка судя по всему не в нём.

    все же для начала убедитесь что код в примере работает, потом измените работающий код под себя.
    1 марта 2010 г. 18:32
  • Эта статья вам не поможет?


    Примерно то-же сделано у меня. Разница только обработчике richTextBox1_DragDrop. Но ошибка судя по всему не в нём.

    все же для начала убедитесь что код в примере работает, потом измените работающий код под себя.

    Попробовал пример из той статьи. Результаты те же, что и в первом случае (код не изменял). AllowDrop устанавливать true приходится программно (в свойствах richTextBox1 этого свойства почему-то нет).
    Обнаружил интересную вещь: когда я перетаскиваю из WordPad то в моём коде DragDrop происходит, а если из других программ (не текстовых редакторов), то DragDrop не вызывается. Самое интересное, через отладку я обнаружил и в коде из той статьи он (если не из текст-редактора) не вызывается (и без отладки наверное тоже, раз ничего не происходит), однако, добавив в код MessageBox.Show("!"); в оба обработчика события (DragEnter и DragDrop), он внезапно стал вызываться и всё заработало (т. е. всё вставляется, только окошки вылетают, которые MessageBox.Show("!");)!!! Метод richTextBox1_DragEnter вызвается абсолютно всегда (и в моём, и в коде статьи). Как объяснить это явление?
    1 марта 2010 г. 18:58
  • ознакомтесь с этой статьей, для более полного контроля за драгндропом, вам необходимо реилизовать обработку еще нескольктй событий. (в часности отслеживать перемещение мыша и вызывать DoDragDrop)
    В этой статье также описывается драгдроп в ричтекстбокс
    еще пример
    запрос в поисковике типа "richtextbox dragdrop between applications" и его вариации дадут вам много материала для изучения
    • Помечено в качестве ответа I.Vorontsov 2 марта 2010 г. 7:50
    1 марта 2010 г. 19:45