【发布时间】:2020-01-08 00:14:24
【问题描述】:
好的,所以我有一个丰富的文本框,并且希望能够拖放到其中。在拖放事件中,我想执行更改富文本框文本的代码,从而激活文本更改事件。但是,我只希望激活文本更改事件中的一些代码,所以我有一个变量块,当它为真时,文本更改事件中的代码将不会激活。这里是:
public Form1()
{
InitializeComponent();
richTextBox1.AllowDrop = true;
richTextBox1.DragDrop += new DragEventHandler(rtbDragDrop);
richTextBox1.DragEnter += new DragEventHandler(rtbDragEnter);
}
private bool block;
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
if (block) return;
MessageBox.Show("Text Changed Called");
}
private void rtbDragDrop(object sender, DragEventArgs e)
{
block = true;
richTextBox1.AppendText("hello");
block = false;
}
private void rtbDragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
block = true;
richTextBox1.AppendText("hello");
block = false;
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
}
但是,仍会调用文本更改的代码。这是因为在文本更改事件可能因某种原因触发之前,block 设置为 false。 然而,最让我困惑的部分是 FORM 拖放工作得很好(与设计师一起添加)。只有richtextbox 拖放会导致此问题。为什么?
【问题讨论】:
-
尝试为富文本框的块变量使用不同的名称。这可能是表单和富文本框拖放之间的冲突。
-
我刚试了一下,还是不行。即使我没有适当的表单拖动事件,这种情况仍然会发生。
-
使用
BeginInvoke()重置block。 -
谢谢!做到了。我是 stackoverflow 的新手,如何将评论标记为答案?
-
不幸的是,你不能,@VisualUser。但是,您可以在回答您自己的问题时解释并展示您是如何使用 Jimi 的解决方案解决问题的,并将其标记为答案。
标签: c# .net winforms drag-and-drop richtextbox