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

Remove icon automatically by dropped file on RichTextBox

我设置为 true AllowDrop 实现了 DragOverDragDrop 事件 RichTextBox。在 DragDrop 事件中,我将删除的文本文件的内容加载到 RTB 上,但它确实在 RTB 中添加了文件的图标,我想将其删除:

编辑:这是我的代码:

void msg_setup_dragDrop()
        {
            msg_textBox.AllowDrop = true;

msg_textBox.EnableAutoDragDrop = 真; 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();
        }

你设置的地方msg_textBox.EnableAutoDragDrop = true, either in your designer window or your code. You need to set this to false. You do still need to set AllowDrop = true

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

我知道这是一个旧的post,但在尝试找到解决同样问题的方法后,我最终得到了一个作品around/solution

拖放方法应该是:

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 方法。或者只需双击事件名称,它就会创建一个新方法供您完成该方法。

图标放置;在 Msg_DragDrop 方法结束时发生,具体取决于 e.Effect 属性。 将此代码添加到方法的末尾=> E.Effect = DragDropEffects.None;

void msg_DragDrop(object sender, DragEventArgs e)

    {
       //your code here


       
       e.Effect = DragDropEffects.None;

    }