winform中关于panel中滚动条和键盘事件几点体会
最近在做winform开发中,遇到几个比较寄售的问题,通过上网查找计和自己琢磨,最终都圆满解决呢!
现在我将谈谈我在项目中遇到的问题集解决方案,以供大家参考!
一、就是我在使用键盘的keydown事件时,我上下移动键盘的方向键时,发现不仅控件没移动,反而控件所在的页面的滚动条随着方向键的上下移动而变化,我开始以为是选择的控件没有获得焦点才导致滚动条发生变化,但是我尝试强制给控件添加焦点,滚动条还是变化!后来我分析可能是给添加控件的键盘事件不对,可是键盘常用的事件就那几个,逐一尝试后,发现还是不能控制滚动条的位置。后来经过上网搜索,最后发现必须得重写键盘事件才行。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData){UctlBaseFineTuningMove(keyData);//return base.ProcessCmdKey(ref msg, keyData); UctlFormDesign_KeyDown(keyData);return true;//return true 取消控件焦点会跟着方向键改变}
默认的是返回这个 return base.ProcessCmdKey(ref msg, keyData);
发现返回true后,keydown事件无法正确执行,所以得得在返回true后重新这些事件
private void UctlFormDesign_KeyDown(Keys key){//switch(e.KeyCode)//{// case Keys.Delete:// DeleteCtls();// break;// default:break;//} if (key == Keys.Delete){DeleteCtls();}else if (key == (Keys.Control | Keys.A))//全选 {SelectAllCtl();}else if (key == (Keys.Control | Keys.S)){ArrangementTable();}else if (key == (Keys.Control | Keys.C))//复制 SeleteCopy();else if (key == (Keys.Control | Keys.V))//粘贴 Seletepaste();else if (key == (Keys.Control | Keys.X))//剪切 {SelectCut();}}
二、还是与滚动条有关。
具体的情形是这样的我在页面上添加了一个panel,设置pane的滚动条可见,然后再panel上绘制图形,可是当我发现绘制图形时没有问题,可是当我在panel的的最下面绘制图形时,这是图形的大小就会随着滚动条的移动变大。而且但我想将绘制的线条移动到顶部或是底部区域时,滚动条会随着一起移动,这样就会造成移动的图形就不能正确定位到所需的位置。后来经过查找,最后找到了一比较简单的处理方式。
就是重写panel,具体的步骤是这样的:首先重写panel
public class HJYPanel : System.Windows.Forms.Panel{protected override Point ScrollToControl(Control activeControl){// return base.ScrollToControl(activeControl);return this.AutoScrollPosition;}}
其次就是原先在页面上直接拖panel,现在改为直接拖HJYPanel这个改写后的panel,然后其他的操作不变,这样就会拖动绘制的图形时,滚动条不会跟着移动!
转载于:https://www.cnblogs.com/xiaolifeidao/p/3155274.html
winform中关于panel中滚动条和键盘事件几点体会相关推荐
- javaFx中fxml的键盘事件
写了一个桌面程序,在登录框中的fxml犯了一个错,记录一下. 在fxml的布局AnchorPane中 加了onKeyPressed="#login_Enter" 接收键盘事件 在 ...
- python+webdriver学习鼠标键盘事件以及定位元素
设置浏览器大小:像素点 set_window_size(width,height) maximize_window() 浏览器全屏显示,不带参数 控制浏览器前进.后退: driver.forward( ...
- 基于OpenGL编写一个简易的2D渲染框架-07 鼠标事件和键盘事件
这次为程序添加鼠标事件和键盘事件 当检测到鼠标事件和键盘事件的信息时,捕获其信息并将信息传送到需要信息的对象处理.为此,需要一个可以分派信息的对象,这个对象能够正确的把信息交到正确的对象. 实现思路: ...
- C++/C--Windows下获取键盘事件
在Visual Studio 2013中可以使用_kbhit()函数来获取键盘事件,使用时需要加入conio.h头文件,例: #include <conio.h> #include < ...
- Element ui 组件中用键盘事件
//这是表单 <el-form:model="ruleForm"status-icon:rules="rules"ref="ruleForm&q ...
- Selenium 键盘事件 操作大全
今天你学习了吗? 一.导入键盘事件 1.导入语句 想使用selenium中的键盘事件,首先我们必须导入Keys包,需要注意的是包名称Keys首字母需要大写.Keys类中提供了几乎所有的键盘事件包括组合 ...
- swing键盘事件(KeyEvent)监听器
当一个组件处于激活状态时,按下.释放或敲击键盘上的某个键时就会发生键盘事件.通过KeyListener接口实现,KeyListener接口有3个方法: keyPressed(KeyEvent e):键 ...
- C/C++获取键盘事件
在vs中可以使用_kbhit()函数来获取键盘事件,使用时需要加入conio.h头文件,例: #include <conio.h> #include <iostream>usi ...
- Winform 中panel的mousewheel鼠标滚轮事件触发
如果将窗体或容器控件(如Panel控件)的AutoScroll属性设置为True时,那么当窗体或Panel容不下其中的子控件时就会出现 滚动条,通过移动滚动条可以上下显示出窗体或Panel中的全部内容 ...
最新文章
- vb初学者编程代码大全_学习VB编程第14天,一个简单的排序代码把我难住了
- git merge --squash改写提交
- 3、Spring配置类
- 技术员联盟win11系统64位专业版镜像v2021.08
- hdu 2873 Bomb Game 博弈论
- 编程语言_JavaScript_面试题005
- 程序员 45 岁怎么了?!
- 关于移动安全的一点总结
- 使用T-SQL语句创建数据库
- 直线段的矢栅转换算法(DDA算法、中心画线算法、Bresenham算法)
- 马上谈薪了,五险一金你还不知道?作为毕业生,钱不能白交!!!
- Python最吃香的5个就业方向,薪资收入也非常可观!
- 信息系统与信息化、信息系统开发方法、常规信息系统集成技术
- 启用了被称为 HTTP 严格传输安全(HSTS)的安全策略,Firefox 只能与其建立安全连接
- android 通话录音
- 一文带你读懂何为 macOS App 公证,以及如何自动化实现
- Python学习(六)——格式化输出
- uniapp使用map地图组件
- 刷新主板BIOS的几种方法
- Toodledo slim 与 Chrome