![](/img/trans.png)
[英]Prevent parent container from scrolling by the mouse wheel if a child (graphic) control is already scrolling
[英]Prevent grid from scrolling on mouse down
当用户的鼠标左键按下并移动时,如何防止Windows(7/8)滚动(触摸事件?) Infragistics
UltraGrid
? 此行为使我的拖放事件变得混乱。
我正在使用UltraGrid
接收并启动拖放。 当用户单击网格中的项目时,我将变量leftButton
设置为true,因此可以防止将该项目放到自身上。 我正在使用MouseLeaveElement
从网格内部启动DoDragDrop
DragDrop
。
代码如下。 它在Windows XP中工作,但在Windows 7和8中失败。现在,释放鼠标左键时将调用mainGrid_MouseLeaveElement
,这已经很晚了,因为拖动应该已经完成。 按下鼠标左键并移动鼠标时,Windows OS似乎正在接管。 释放鼠标按钮时,它将释放回应用程序。
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;
}
通过在maingrid上使用SelectionDrag事件而不是MouseLeaveElement解决了此问题。
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;
}
}
代替
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.