winforms 在数据网格视图C#中发布DragDrop事件

g6ll5ycj  于 2022-11-16  发布在  C#
关注(0)|答案(1)|浏览(177)

我在其中有一个主窗体,我正在使用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()));
nukf8bse

nukf8bse1#

根据Jimi的评论,这个问题是通过使用BeginInvoke()解决的。这是我使用的确切代码

this.BeginInvoke((Func<DialogResult>)(() => child.ShowDialog()));

相关问题