【问题标题】:Remove icon automatically by dropped file on RichTextBox通过在 RichTextBox 上放置的文件自动删除图标
【发布时间】:2015-03-31 23:32:00
【问题描述】:

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

编辑:这是我的代码:

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

【问题讨论】:

  • 无代码,但您是打开文件并仅添加文本还是仅接受丢弃的任何内容?
  • @stuartd:我会看看这段代码与我的代码有何不同。谢谢!
  • @Plutonix:查看编辑。我添加了我的代码。我想我只是在阅读文件并附加文本。它曾经在 TextBox 上工作得很好。 RTB 有何不同?
  • @dbc:是的。我将编辑标签。

标签: c# winforms drag-and-drop richtextbox


【解决方案1】:

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

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

【讨论】:

  • 我确实将EnableAutoDragDrop 设置为true。谢谢你的解释。
【解决方案2】:

我知道这是一篇旧帖子,但在尝试为同一问题找到解决方案后,我最终找到了解决方法/解决方案

DragDrop 方法应该是:

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,它就会为您创建一个新方法来完成该方法。

【讨论】:

    【解决方案3】:

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

    void msg_DragDrop(object sender, DragEventArgs e)
    
        {
           //your code here
    
    
           
           e.Effect = DragDropEffects.None;
    
        }
    

    【讨论】:

    • 请修正上述代码的格式。另外,如果您可以向作者添加一些有关这如何提供帮助的详细信息,那就太好了。
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 2016-02-17
    • 2023-02-02
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多