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 ...
随机推荐
- [错误代码:0x80070002]IIS7及以上伪静态报错404
故障现象:DTCMS开启伪静态功能,VS2010预览正常,发布到IIS后报错404.0错误 (WIN7,WIN8,SERVER2008).模块IISWebCore通知MapRequestHandler ...
- Linux VPS 免费管理面板推荐
现在各种国内外VPS,云主机横行,越来越多的站长接受在VPS上建站,很多VPS主机售价便宜,性能优秀,但都是基于linux系统的,如openvz的主机,linux服务器系统主要是通过shell命令行来 ...
- Mac OS 上设置 JAVA_HOME
Mac OS 上设置 JAVA_HOME 原文链接:http://han.guokai.blog.163.com/blog/static/136718271201301183938165/ 由于需要, ...
- Ogre1.8.1源码编译
本文的编译环境为Windows7_SP1 + VS2010_SP1 + CMake2.8.11 :) 资源下载 1. 下载Ogre1.8.1的源代码,下载链接地址:http://www.ogre3 ...
- 直面Javascript面试题算法思路
一.字符串遍历类 1.获取符合条件的字符 思路:一般使用正则表达式会比遍历字符串简单.a=str.match(reg),a即为所得. 例子:a.判断字符串是否是这样组成的,第一个必须是字母,后面可以是 ...
- Codeforces449A Jzzhu and Chocolate && 449B Jzzhu and Cities
CF挂0了,简直碉堡了.两道题都是正确的思路但是写残了.写个解题报告记录一下心路历程. A题问的是 一个n*m的方块的矩形上切k刀,最小的那一块最大可以是多少.不难发现如果纵向切k1刀,横向切k2刀, ...
- 【hadoop】有参考价值的博客整理
好文章的网址: hadoop shuffle机制中针对中间数据的排序过程详解(源代码级) Hadoop mapreduce原理学习 与 Hadoop 对比,如何看待 Spark 技术? 深入理解Had ...
- spring mvc绑定对象String转Date解决入参不能是Date的问题
使用spring的mvc,直接将页面参数绑定到对象中,对象中有属性为Date时会报错,此时需要处理下. 同样的,其他的需要处理的类型也可以用这种方法. 在controller中加入代码 @InitBi ...
- java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片
package com.lp.ecjtu; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...
- [转载] Linux poll机制
原地址:http://hongwazi.blog.163.com/blog/#m=0&t=3&c=poll poll的是一种查询的方式,英文解释 :民意调查 函数原型:int poll ...