通过在 RichTextBox 上放置文件自动删除图标
Remove icon automatically by dropped file on RichTextBox
我设置为 true
AllowDrop
实现了 DragOver
和 DragDrop
事件 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;
}
我设置为 true
AllowDrop
实现了 DragOver
和 DragDrop
事件 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;
}