Хорошо, у меня есть richtextbox, и я хотел бы иметь возможность перетаскивать его. Внутри события перетаскивания я хотел бы выполнить код, который изменяет текст richtextbox, который, в свою очередь, активирует событие измененного текста. Однако я хочу, чтобы только часть кода внутри события измененного текста активировалась, поэтому у меня есть переменный блок, который при значении true этот код внутри события измененного текста не будет активирован. Вот оно:
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;
}
Однако текст измененного кода все равно вызывается. Это связано с тем, что блок имеет значение false, прежде чем событие измененного текста может произойти по какой-либо причине. Однако, часть, которая смущает меня больше всего, - то, что перетаскивание FORM работает просто отлично (добавлено с дизайнером). Только перетаскивание richtextbox вызывает эту проблему. Почему?