通过在RichTextBox上拖放文件自动删除图标

3
我在RichTextBox中将AllowDrop设置为true,实现了DragOverDragDrop事件。在DragDrop事件中,我将拖放的文本文件内容加载到RTB中,但是它会在RTB中添加文件的图标,而我想要移除它:

enter image description here

编辑:这是我的代码:

void msg_setup_dragDrop()
        {
            msg_textBox.AllowDrop = true;

msg_textBox.EnableAutoDragDrop = true; msg_textBox.DragEnter += new DragEventHandler(msg_DragEnter); msg_textBox.DragDrop += new DragEventHandler(msg_DragDrop); }

这段代码是关于启用文本框的自动拖放功能,同时添加了拖入和拖放事件的处理程序。
        void msg_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                e.Effect = DragDropEffects.Copy;
        }

        void msg_DragDrop(object sender, DragEventArgs e)
        {
            string[] files = (string[]) e.Data.GetData(DataFormats.FileDrop);
            StringBuilder buffer = new StringBuilder();

            foreach (string filename in files)
            {
                try
                {
                    string text = File.ReadAllText(filename);
                    buffer.Append(text);
                }
                catch (Exception ex)
                {
                    string errMsg = string.Format("cannot read the file\"{0}\" error: {1}", filename, ex.Message);
                    MessageBox.Show(errMsg, "Reading file error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }

            msg_textBox.Text = buffer.ToString();
        }

可能是将文件拖入RichTextBox以读取文件中的文本的重复问题。 - stuartd
你是在打开文件并添加文本,还是只接受任何拖放的内容? - Ňɏssa Pøngjǣrdenlarp
@stuartd:我会检查一下这段代码与我的代码有何不同。谢谢! - Jack
@Plutonix:看一下我的编辑。我添加了我的代码。我猜我只是在读取文件并追加文本。在TextBox上它过去可以正常工作。在RTB上有什么不同吗? - Jack
@dbc:好的,我会编辑标签。 - Jack
3个回答

4
您在设计窗口或代码中设置了msg_textBox.EnableAutoDragDrop = true,您需要将其设置为 false。仍然需要设置AllowDrop = true

当设置为 true 时,winforms RichTextBox 提供拖放事件的标准行为,以添加自定义处理程序。如果不想要标准行为,则必须完全自己编写处理程序。(放下文本文件的标准行为是OLE嵌入。如果双击图标,则启动记事本。)。


我真的将“EnableAutoDragDrop”设置为“true”。感谢您的解释。 - Jack

1
我知道这是一篇旧文章,但在尝试寻找解决方案后,我最终找到了一个解决方法/解决方案。
拖放方法应该是:
private void RTB_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
    String[] filename = (String[])e.Data.GetData(DataFormats.FileDrop);
    RTB.Text = fileName[0]; //this is where the text is
}

现在,如果您定义了一个RTB TextChanged方法(RTB是富文本框),获取RTB.Text,然后设置RTB.Text。

这似乎可以擦除RTB中不需要的图标。

示例:

private void RTB_TextChanged(object sender, EventArgs e)
{
    string currentText = RTB.Text.ToString();
    RTB.Text = currenText;
}

注意:您需要转到 RTB 属性并单击闪电图标(事件),然后将 TextChanged 事件指向您定义的 RTB_TextChanged 方法。或者只需双击 EventName,它会为您创建一个新方法,以便您完成该方法。

-2
图标放置;在 Msg_DragDrop 方法结束时发生,取决于 e.Effect 属性。 将以下代码添加到方法的末尾=> E.Effect = DragDropEffects.None;
void msg_DragDrop(object sender, DragEventArgs e)

    {
       //your code here


       
       e.Effect = DragDropEffects.None;

    }

请修复上面代码的格式。如果您能向作者添加一些关于如何帮助的细节,那就太好了。 - Ali Briceño

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接