为了账号安全,请及时绑定邮箱和手机立即绑定

拖放到网格后如何在应用程序中重新获得焦点

拖放到网格后如何在应用程序中重新获得焦点

C#
慕容3067478 2021-11-14 17:01:33
在我的应用程序中,我有一个带有两个面板的表单。一个面板里面是一个按钮。在另一个内部是一个 DevExpress Grid 控件。网格由 3 列组成。您可以将值从一列拖到另一列中以进行复制。我的问题是,每当我从一列拖放到另一列时,对应用程序的关注就会进入一种不寻常的状态。网格保持聚焦;我可以将鼠标悬停在标题上并看到它们正常反应。然而,应用程序的其余部分并未集中。将鼠标悬停在另一个面板中的按钮上没有反应,菜单或表单控件也没有反应。如果我单击该按钮,它的反应就像我单击了一个未聚焦的应用程序一样。我必须再次单击才能真正激活按钮。除了网格之外的每个控件都相同。我曾尝试在按钮和表单上使用 Activate() 和 Focus() 但无济于事。namespace Company.StuffUploader{    public partial class ComputationGrid : DevExpress.XtraEditors.XtraUserControl    {        private BindingList<ComputationLinkModel> _links = new BindingList<ComputationLinkModel>();        public List<ComputationLinkModel> ComputationLinkModels        {            get            {                return new List<ComputationLinkModel>(_links);            }        }        public ComputationGrid()        {            InitializeComponent();        }        private void ComputationGrid_Load(object sender, EventArgs e)        {            _gridControl.DataSource = _links;        }        private DragDropEffects GetDragEffect(DragEventArgs e)        {            var text = e.Data.GetData("System.String") as string;            if (text == null)                return DragDropEffects.None;            var link = GetLinkFromScreenPoint(new Point(e.X, e.Y));            if (link == null)                return DragDropEffects.None;            var tokens = text.Split('\t');            if (tokens.Count() != 2)                return DragDropEffects.None;            var dateString = link.movedate.ToString("yyyy-MM-dd");            if (link.StuffSurfaceName == tokens[0] && dateString != tokens[1])                return DragDropEffects.Move;            else                return DragDropEffects.None;        }        private ComputationLinkModel GetLinkFromScreenPoint(Point screenPt)        {            var pt = _gridControl.PointToClient(screenPt);            var hitInfo = _gridView.CalcHitInfo(pt);            return _gridView.GetRow(hitInfo.RowHandle) as ComputationLinkModel;        }
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

确保在 GridView 的 Mouse~ 事件处理程序中将DXMouseEventArgs.Handled属性设置为 true。它保证这些事件的默认处理将被禁止。查看此示例以了解如何执行此操作。


查看完整回答
反对 回复 2021-11-14
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我想出了我自己的问题。从 MouseDown 事件中调用 DoDragDrop() 似乎无法正常工作。正确的方法是从 MouseMove() 调用它。MSDN 上文档在其示例代码中暗示了这一点。


查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信