首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止网格在鼠标向下滚动

防止网格在鼠标向下滚动
EN

Stack Overflow用户
提问于 2014-01-29 19:30:49
回答 1查看 710关注 0票数 1

如何防止Windows (7/8)滚动(触摸事件)?当用户的鼠标左键关闭并移动时,会出现Infragistics UltraGrid吗?这种行为扰乱了我的拖放事件。

我正在使用一个UltraGrid来接收和启动拖拽。当用户单击网格中的某一项时,我将变量leftButton设置为true,这样就可以防止将该项删除到它本身上。我正在使用MouseLeaveElement从网格中启动DoDragDrop DragDrop

代码在下面。它在Windows中工作,但在Windows7和8中失败。当鼠标左键被释放时,mainGrid_MouseLeaveElement正在被调用,这很晚,因为拖动应该已经完成了。看起来,当鼠标左下,鼠标被移动时,Windows操作系统正在接管。它在释放鼠标按钮时将其释放回应用程序。

代码语言:javascript
运行
复制
private leftMouseDown = false;

public void Fill(ToolbarForm ownerForm, DocumentOwner owner, int? ownerIdentifier)
{
    ...
    this.mainGrid.DragDrop += new DragEventHandler(grid_DragDrop);
    this.mainGrid.DragEnter += new DragEventHandler(grid_DragEnter);
    this.mainGrid.MouseDown += new MouseEventHandler(mainGrid_MouseDown);
    this.mainGrid.MouseUp += new MouseEventHandler(mainGrid_MouseUp);
    this.mainGrid.MouseLeaveElement += new Infragistics.Win.UIElementEventHandler(mainGrid_MouseLeaveElement);
    ...
}

void mainGrid_MouseLeaveElement(object sender, Infragistics.Win.UIElementEventArgs e)
{
    if (leftMouseDown)
    {
        ...
        DataObject data = new DataObject();
        data.SetFileDropList(files);
        this.mainGrid.DoDragDrop(data, DragDropEffects.Copy);
        leftMouseDown = false;
    }
}

void mainGrid_MouseUp(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
        leftMouseDown = false;
}

void mainGrid_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
        leftMouseDown = true;
}

public void grid_DragDrop(object sender, DragEventArgs e)
{
    string[] filenames = (string[])e.Data.GetData(DataFormats.FileDrop);

    foreach (string filename in filenames)
    {
        this.AddDocument(filename);
    }
}

private void grid_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop, false) && !leftMouseDown)
    {
        e.Effect = DragDropEffects.All;
    }

    else e.Effect = DragDropEffects.None;
}
EN

Stack Overflow用户

回答已采纳

发布于 2014-01-30 13:02:07

通过使用主网格上的SelectionDrag事件而不是MouseLeaveElement来解决这个问题。

代码语言:javascript
运行
复制
void maingrid_SelectionDrag(object sender, Infragistics.Win.UIElementEventArgs e)
{
    if (leftMouseDown)
    {
        ...
        DataObject data = new DataObject();
        data.SetFileDropList(files);
        this.mainGrid.DoDragDrop(data, DragDropEffects.Copy);
        leftMouseDown = false;
    }
}

而不是

代码语言:javascript
运行
复制
void mainGrid_MouseLeaveElement(object sender, Infragistics.Win.UIElementEventArgs e)
{
    if (leftMouseDown)
    {
        ...
        DataObject data = new DataObject();
        data.SetFileDropList(files);
        this.mainGrid.DoDragDrop(data, DragDropEffects.Copy);
        leftMouseDown = false;
    }
}
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21440763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档