0

簡単なページがあります。データベース内のテストテーブルにバインドされた1つのリッチテキストボックス。

EnableAutoDragDropをtrueに設定しました。

すべてがうまく機能し、ボックスの内容が保存され、要求されたときに元に戻すことができます。

私の問題は、画像をRTBにドロップすることです。それらをファイルマネージャー(任意の種類の画像ファイル)から直接ドラッグすると、実際の画像ではなく、ファイル名が表示されたアイコンが表示されます。

Wordを開いて画像をWordにドロップし、RTBにドラッグすると、画像は問題なく表示されます。

私はファイルマネージャーとwordと私のRTBの間のプロセスの仕組みを理解していないと思います。誰かが私を啓発できますか?

4

2 に答える 2

4

@climbageによって提供された回答には良い説明があります。RichTextBoxでドラッグアンドドロップを実行する方法は次のとおりです

出力

コード:

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();
        }
    }

}

詳細については編集

これが、[プロパティ]タブに表示されない理由です。属性 [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; 
        }
    }
于 2012-06-27T23:07:30.990 に答える
1

ドラッグイベントには、ドラッグイベントのソースによって決定される複数のフォーマットタイプを含めることができます。画像(.png)をファイルシステムからC#コントロールにドラッグすると、この利用可能な形式のセットを取得します(これらはから取得できることに注意してくださいDragEventArgs.Data.GetFormats()

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

同じ画像をWordにドラッグしてから、C#コントロールにドラッグすると、次の形式のリストが表示されます。

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

ドラッグデータの処理方法と使用する形式を決定するのは、完全にターゲットコントロール次第です。MS WordはFileNameW、ドロップされたファイルへのパスである形式を取り、画像を読み取る場合があります。RichTextBoxおそらく、とFileNameWそのアイコンを取得しますが。

于 2012-06-27T22:09:53.373 に答える