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,然后其他的操作不变,这样就会拖动绘制的图形时,滚动条不会跟着移动!
winform中关于panel中滚动条和键盘事件几点体会的更多相关文章
- 基于OpenGL编写一个简易的2D渲染框架-07 鼠标事件和键盘事件
这次为程序添加鼠标事件和键盘事件 当检测到鼠标事件和键盘事件的信息时,捕获其信息并将信息传送到需要信息的对象处理.为此,需要一个可以分派信息的对象,这个对象能够正确的把信息交到正确的对象. 实现思路: ...
- C/C++ 获取键盘事件
Windows 系统下的 vs 中可以使用 _kbhit() 函数来获取键盘事件,使用时需要加入 conio.h 头文件 #include <conio.h> #include <i ...
- 吴裕雄--天生自然python学习笔记:python 用pygame模块检测键盘事件和鼠标事件
用户可通过键盘输入来操控游戏中角色的运动,取得键盘事件的方法有以下两种 : 常用的按键与键盘常数对应表 : 按下右箭头键,蓝色小球会 向 右移动:按住右箭头键不放 , 球体会快速 向 右移 动, 若到 ...
- C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子
C#WinForm父级窗体内Panel容器中嵌入子窗体.程序主窗体设计例子 在项目开发中经常遇到父级窗体嵌入子窗体所以写了一个例子程序,顺便大概划分了下界面模块和配色,不足之处还望指点 主窗体窗体采用 ...
- Winform 中panel的mousewheel鼠标滚轮事件触发
如果将窗体或容器控件(如Panel控件)的AutoScroll属性设置为True时,那么当窗体或Panel容不下其中的子控件时就会出现 滚动条,通过移动滚动条可以上下显示出窗体或Panel中的全部内容 ...
- C# Winform中无焦点状态下获取键盘输入或者USB扫描枪数据
类文件: C#类文件 using System; using System.Collections.Generic; using System.Text; using System.Runtime.I ...
- C#的winform中控制TextBox中只能输入数字
C#的winform中控制TextBox中只能输入数字 private void textBox3_KeyPress(object sender, System.Windows.Forms.KeyPr ...
- JQuery中如何处理键盘事件
背景:比如在页面中,敲击回车键以后,实现登录功能,在之前的Winform开发时,也遇到过处理键盘事件的功能,比如游戏软件中,上下左右的移动等. 代码如下: $(document).keydown(fu ...
- Dev Express中Dock panel的使用
使用DockManager,添加DockPanel. 1,DockManager位于“导航和布局”分类中. 添加一个DockManager控件到窗体中以后,即是在当前窗体类中,添加一个DockMana ...
随机推荐
- .Net 命名(委托,事件==)
委托及参数命名: public delegate void ClickedEventHandler(object sender, ClickedEventArgs e); ClickedEventHa ...
- 提高Asp.Net应用程序性能的十大方法(译感)
译完了提高Asp.Net应用程序的十大方法这篇文章,仔细想其中提到的每一条,在这里结合我的项目来谈谈.第一条:返回多个结果集因为我的项目中所有对数据库的访问的sql语句都是通过调用存储过程实现的,所以 ...
- 使用 Swagger UI 与 Swashbuckle 创建 RESTful Web API 帮助文件
作者:Sreekanth Mothukuru 2016年2月18日 本文旨在介绍如何使用常用的 Swagger 和 Swashbuckle 框架创建描述 Restful API 的交互界面,并为 AP ...
- poj 3684
Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 784 Accepted: 266 ...
- Visual Studio 2015支持为Linux构建应用
点这里 微软著名的集成开发环境有可能是首次在其产品页提及了竞争对手Linux.Visual Studio 2015的页面声称,“Build for iOS, Android, Windows devi ...
- Java中常用的加密方法(JDK)
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...
- 一个轻量级的3D CSS 库
JavaScript 3D library 该项目的目的是为了打造轻量级的.实用简单的3D CSS库. Usage使用方法 下载 minified库文件 和 css文件,并将其包含于你的HTML中,就 ...
- ARM 汇编指令
ARM汇编程序特点: l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通 ...
- 使用datatable 将测试数据与业务分离
当基本一致的业务流程, 需要测试繁杂的测试数据时,就可以将测试数据参数化了,同时使用datatable来实现测试数据与业务分离,这个方法在我现在的项目中应用在很多地方,感觉超级方便,现对工作中的应用做 ...
- AngularJS学习笔记1——什么是AngularJS?
Angular JS是一个由Google维护的开源的Javascript框架,主要作者为: Misko Hevery(angular JS之父, Sr. Computer Scientist at G ...