我在其中有一个主窗体,我正在使用datagridview,我还使用datagridview的dragdrop事件将文件放到我的datagridview中,一旦我将文件放到datagridview中,另一个窗体将显示以选择用户希望显示的数据和排列数据等
当我的第二个窗体显示时,我想让它完全像这段代码的效果一样聚焦child.ShowDialog();
意味着用户在完成此窗体之前不能单击主窗体
但如果我在DragDrop事件中间使用上述代码,则主窗体外的鼠标光标将具有DragDropEffects.Copy;
的效果,甚至我拖动文件的文件夹也会冻结,直到我关闭第二个窗体
我理解发生这种情况是因为ShowDialog()
,这是我的拖放事件代码。
private void dataGridView1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void dataGridView1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
Form2 child = new Form2();
child.ShowDialog();
}
}
我问题是:是否有任何后拖放事件,以便一旦用户释放鼠标,我从拖放操作中获得文件名,然后我可以显示form2?
下面是光标在应用程序外的图像。
**EDIT:**根据Jimi的评论,这个问题是通过使用BeginInvoke()解决的。这是我使用的确切代码
this.BeginInvoke((Func<DialogResult>)(() => child.ShowDialog()));
1条答案
按热度按时间nukf8bse1#
根据Jimi的评论,这个问题是通过使用BeginInvoke()解决的。这是我使用的确切代码