【上下左右的移动】控制选中button按钮

问题描述

我想通过键盘的上下左右键,完成对于Button的选中状态的改变。在这里,我先给所有的button弄了tab按钮顺序;上:选中上一行的button。下:选中上一行的button。左:选此行左边的button。右:选此行右边的button。求大神们指导。谢谢!

解决方案

解决方案二:
不失一般性,假设我们对于所有要判断操作的Button抽象一下其位置概念,例如设计其数据结构是publicclassPos{publicintLeft,Top,Right,Bottom;publicButtonTarget;}

那么假设你已经将需要参与判断的按钮记录到一个List<Pos>集合中(用变量datas引用这个集合),假设要找到某个坐标(x,y)“左边最近的一个位置”,就可以这样查询varbutton=(frompindataswherep.Right<=x//只判断起点在x左边的按钮letdist=Math.Abs(p.Right-x)*3+Math.Abs((p.Top+p.Bottom)*0.5-y)//查找距离时,假设x方向的距离权重为3orderbydistselectp.Target).FirstOrDefault();

这里,使用类似“曼哈顿距离”的方式来估计距离,并且将x方向放大3倍,以便优先选择“行y坐标比较接近”的button。对于上、右、下的查询语句,是类似的,只要选择距离最近的一个button即可。
解决方案三:
只判断起点在x左边的按钮-->只判断right边在x左边的按钮这里,简单来说:程序=数据结构+linq查询算法把二者分别写清楚即可。
解决方案四:
你之前给button设置TabIndex,其实是没用的。因为关键点在于坐标,而且button之间的坐标相对性是变动的(甚至不是矩阵的),不是死板的。扩大开来,假设你的form其实是一张“世界地图”,而你的button此时只是一些很小的、坐标可能动态变化的矩形,并且有几十万甚至上百万个button,此时要寻找距离(x,y)最近的一个(或者10个)button,应该做什么修改呢?根据业务实际,通常首先只在(x,y)周边的一个限制范围内来查找Pos对象,也就是在第一个条件上就排除了99.5%的对象了,然后才来根据dist排序。这样分为两阶段查询,就可以优化查询。更重要地优化(例如Uber就需要进行这样的优化)做法,是需要将这个“限制范围”表示地图上确定编号的、某几个相邻的矩形或者六边形,这样大量查询所确认的“限制范围”就能使用到之前刚刚重复了上万次的缓存结果,而不是每一次查询时都去到datas里边去找。

时间: 2024-12-30 21:18:18

【上下左右的移动】控制选中button按钮的相关文章

我用onKeyDown事件实现页面跳转,不使用button按钮,直接用蓝牙控制器的按钮控制跳转

问题描述 我用onKeyDown事件实现页面跳转,不使用button按钮,直接用蓝牙控制器的按钮控制跳转 解决方案

asp.net-asp:GridView不写button按钮选中一行数据并获取选中的值!

问题描述 asp:GridView不写button按钮选中一行数据并获取选中的值! <asp:TemplateField HeaderText="姓名" HeaderStyle-Width="150px"> <ItemTemplate> <asp:Label ID="Label6" runat="server" Text='<%# Eval("UserName") %&g

JavaScript通过this变量快速找出用户选中radio按钮的方法

 这篇文章主要介绍了JavaScript通过this变量快速找出用户选中radio按钮的方法,涉及javascript中this变量的使用技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了JavaScript通过this变量快速找出用户选中radio按钮的方法.分享给大家供大家参考.具体分析如下: 下面的JS代码通过this变量结合radio按钮的onchange事件快速找出用户选择的哪一个radio按钮 ? 1 2 3 4 5 6 7 8 9 10 11 <script>

修改按钮-Android中adapter数据传递出去与控制activity中按钮状态

问题描述 Android中adapter数据传递出去与控制activity中按钮状态 1C 求大神告知,我在adapter中获得了数据,是一个List 现在我在包适配器的这个activity中要用这个List如何将数据传递到activity中去呢?或者说我在activity中如何调用这个数据呢?还有一个问题,我在adapter中 viewHolder.imageIsCheck.setTag(position); convertView.setOnClickListener(new Content

在asp.net 中page_load 方法里面判断button按钮是否被点击过?代码怎么写?

问题描述 在asp.net中page_load方法里面判断button按钮是否被点击过?如果点击过,就调用方法.代码怎么写? 解决方案 本帖最后由 wings1991 于 2012-04-06 23:27:55 编辑解决方案二:page_load是最初始的,所有变量都是初始值,你可以把信息记录到文件,从文件中读取解决方案三:++引用1楼的回复: page_load是最初始的,所有变量都是初始值,你可以把信息记录到文件,从文件中读取 解决方案四:要不你还可以用一个静态变量来控制一下,用他的值来判断

jQuery Mobile中的button按钮组件基础使用教程_jquery

一.Button 组件及 jQuery Mobile 如何丰富组件样式在 jQuery Mobile 里,可以通过给任意链接添加 data-role="button" 来产生一个 button 组件,jQuery Mobile 会追加一定的样式到链接,值得注意的是,jQuery Mobile 在给组件元素追加样式时不一定只在原有的元素上添加 CSS 和 Javascript 响应,一般还会追加一些新的元素使到组件的样式更接近于原生的 App 组件样式.下面给出一个例子: 这是一个添加了

asp.net 页面回车触发button按钮事件

asp.net 页面回车触发button按钮事件 深层次来说这不是 ASP.NET 的问题, 而是 html form 的 submit 按钮就是如何设计的. 当你的光标焦点进入某个表单元素的时候,会激活该表单中第一个(流布局顺从左到右,从上至下) type=submit 的按钮(假如有),等待响应回车事件,并提交该form 你可以测试一下代码: <form action=""> <input type="text" /> <input

JavaScript通过this变量快速找出用户选中radio按钮的方法_javascript技巧

本文实例讲述了JavaScript通过this变量快速找出用户选中radio按钮的方法.分享给大家供大家参考.具体分析如下: 下面的JS代码通过this变量结合radio按钮的onchange事件快速找出用户选择的哪一个radio按钮 <script> function favAnimal(button) { alert('You like '+button.value+'s.'); } </script> <input type="radio" name

ajax-updatepanel中放入kindeitor点击button按钮kindeitor异常

问题描述 updatepanel中放入kindeitor点击button按钮kindeitor异常 C# ajax updatepanel中放入kindeitor和button提交按钮后,点击button按钮,kindeitor消失或者改变,不知道问题出在哪了,请知道的朋友指导.我将button在updatepanel之外就没有这个问题.