2012-06-27 4 views
0

У меня есть простая страница. Один Rich Text Box привязан к тестовой таблице в моей базе данных.Rich Text Box Изображение Не отображается изображение

Я превратил EnableAutoDragDrop в true.

Все отлично работает, содержимое коробки сохраняется и может быть восстановлено при запросе.

Моя проблема - удаление изображения в RTB. Если я перетаскиваю их непосредственно из диспетчера файлов (любой тип файла изображения), тогда я получаю значок с именем файла, которое отображается, а не фактическое изображение.

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

Я думаю, что я не понимаю механику процесса между файловым менеджером и словом и моим RTB. Может ли кто-нибудь поднять меня?

ответ

1

Событие перетаскивания может содержать несколько типов форматов, которые определяются источником события перетаскивания. Когда я перетащить изображение (.png) из файловой системы управления C#, я получаю этот набор доступных форматов (отметить, вы можете получить их от DragEventArgs.Data.GetFormats())

Shell IDList Array 
Shell Object Offsets 
DragImageBits 
DragContext 
InShellDragLoop 
FileDrop 
FileNameW 
FileName 

Теперь, когда я тащу то же изображение на слово, а затем мой контроль C#, я получаю этот список форматов:

Woozle 
Object Descriptor 
Rich Text Format 
HTML Format 
System.String 
UnicodeText 
Text 
EnhancedMetafile 
MetaFilePict 
Embed Source 

это полностью до целевого управления, чтобы определить, как обрабатывать данные сопротивления, и какой формат (ей) использовать. MS Word может принимать формат FileNameW, который является просто удаленным файлом и считывает изображение. В то время как RichTextBox, вероятно, принимает FileNameW и получает его значок.

+0

Спасибо, что избавляется от некоторых темных пятен на карте. – Kassabba

4

Ответа на этот вопрос @climbage получил хорошее объяснение. вот как добиться перетаскивание в RichTextBox

OutPut

Код:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace rich_RichtextboxDragDrop 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      AllowDrop = true; 
      this.richTextBox1.DragEnter += new DragEventHandler(richTextBox1_DragEnter); 
      this.richTextBox1.DragDrop += new DragEventHandler(richTextBox1_DragDrop); 
     } 
     void richTextBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) 
     { 

      if ((e.Data.GetDataPresent(DataFormats.FileDrop))) 
      { 
       e.Effect = DragDropEffects.Copy; 
      } 
     } 
     void richTextBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) 
     { 
      Image img = default(Image); 
      img = Image.FromFile(((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString()); 
      Clipboard.SetImage(img); 

      this.richTextBox1.SelectionStart = 0; 
      this.richTextBox1.Paste(); 
     } 
    } 

} 

Edited для получения дополнительной информации

Это почему вы не видите его в PropertiesTab , Attribute[Browsable(false)] свяжется с PropertyGrid, чтобы показать объект. Вот исходный код из MSDN.

/// <include file='doc\RichTextBox.uex' path='docs/doc[@for="RichTextBox.DragEnter"]/*' /> 
    /// <devdoc> 
    ///  RichTextBox controls have built-in drag and drop support, but AllowDrop, DragEnter, DragDrop 
    ///  may still be used: this should be hidden in the property grid, but not in code 
    /// </devdoc> 
    [Browsable(false)] 
    public new event DragEventHandler DragEnter { 
     add { 
      base.DragEnter += value; 
     } 
     remove { 
      base.DragEnter -= value; 
     } 
    } 
+0

Есть ли какая-то логика о том, почему на вкладке свойств отображается индикатор события drag/drop? – Kassabba

+0

Поскольку все элементы управления в Windows Forms относятся к классу System.Windows.Forms.Control, реализация drag-and-drop идентична во всех этих элементах управления. Это может быть так, если они не находятся на вкладке «Дизайнер» или «Свойства». – MMK

+1

@ Kassabba Я отредактировал ответ MMK, чтобы показать, почему вы не видите его в дизайнере. – climbage

Смежные вопросы