最近在做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中滚动条和键盘事件几点体会的更多相关文章

  1. 基于OpenGL编写一个简易的2D渲染框架-07 鼠标事件和键盘事件

    这次为程序添加鼠标事件和键盘事件 当检测到鼠标事件和键盘事件的信息时,捕获其信息并将信息传送到需要信息的对象处理.为此,需要一个可以分派信息的对象,这个对象能够正确的把信息交到正确的对象. 实现思路: ...

  2. C/C++ 获取键盘事件

    Windows 系统下的 vs 中可以使用 _kbhit() 函数来获取键盘事件,使用时需要加入 conio.h 头文件 #include <conio.h> #include <i ...

  3. 吴裕雄--天生自然python学习笔记:python 用pygame模块检测键盘事件和鼠标事件

    用户可通过键盘输入来操控游戏中角色的运动,取得键盘事件的方法有以下两种 : 常用的按键与键盘常数对应表 : 按下右箭头键,蓝色小球会 向 右移动:按住右箭头键不放 , 球体会快速 向 右移 动, 若到 ...

  4. C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子

    C#WinForm父级窗体内Panel容器中嵌入子窗体.程序主窗体设计例子 在项目开发中经常遇到父级窗体嵌入子窗体所以写了一个例子程序,顺便大概划分了下界面模块和配色,不足之处还望指点 主窗体窗体采用 ...

  5. Winform 中panel的mousewheel鼠标滚轮事件触发

    如果将窗体或容器控件(如Panel控件)的AutoScroll属性设置为True时,那么当窗体或Panel容不下其中的子控件时就会出现 滚动条,通过移动滚动条可以上下显示出窗体或Panel中的全部内容 ...

  6. C# Winform中无焦点状态下获取键盘输入或者USB扫描枪数据

    类文件: C#类文件 using System; using System.Collections.Generic; using System.Text; using System.Runtime.I ...

  7. C#的winform中控制TextBox中只能输入数字

    C#的winform中控制TextBox中只能输入数字 private void textBox3_KeyPress(object sender, System.Windows.Forms.KeyPr ...

  8. JQuery中如何处理键盘事件

    背景:比如在页面中,敲击回车键以后,实现登录功能,在之前的Winform开发时,也遇到过处理键盘事件的功能,比如游戏软件中,上下左右的移动等. 代码如下: $(document).keydown(fu ...

  9. Dev Express中Dock panel的使用

    使用DockManager,添加DockPanel. 1,DockManager位于“导航和布局”分类中. 添加一个DockManager控件到窗体中以后,即是在当前窗体类中,添加一个DockMana ...

随机推荐

  1. Matlab画柱状和折线对照图

        上面是效果图,看着很不错吧,主要的问题在于用XTickLabel设置横坐标时候,横坐标会扩展,就是说如果label是[1 2 3],咱就做了三组试验,参数分别是 1 2 3,但是显示是1 2 ...

  2. UML构建模块(转载)

    UML描述的实时系统,这是非常重要的一个概念模型,然后进行逐渐. UML的概念模型可以通过学习掌握以下三大要素: UML构建模块 规则连接构建模块 UML的公共机制 本章介绍了所有的UML构建块. U ...

  3. codeforces #236 div2 简洁题解

    A:A. Nuts time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...

  4. PE文件结构

    PE头 typedef struct _IMAGE_NT_HEADERS { DWORD Signature; PE头标识 为固定的ascii码 PE\\ IMAGE_FILE_HEADER File ...

  5. response ,request编码

    request.setCharacterEncoding()是你设置获得数据的编码方式.response.setCharacterEncoding()是你响应时设置的编码.response.setCo ...

  6. MapReduce数据流向分析

    MR数据流向示意图 步骤 1 输入文件从HDFS流向Mapper节点.在一般情况下,map所需要的数据就存在本节点,这就是数据本地化计算的优势,但是往往集群中数据分布不均衡(1000台节点,数据冗余度 ...

  7. 快速编写HTML,CSS代码的有力工具Emmet插件

    Emmet 是一个编辑器插件,它以一种简写的语法规则可用于快速编写html或css文档内容,它支持多种编辑器. 从官网:http://emmet.io/ 可下载各个编辑器的插件.notepad++ 插 ...

  8. 11gR2数据库日志报错:Fatal NI connect error 12170、

    11gR2数据库日志报错:Fatal NI connect error 12170.TNS-12535.TNS-00505 [问题点数:100分,结帖人MarkIII]             不显示 ...

  9. main函数和启动例程

    为什么汇编程序的入口是_start,而C程序的入口是main函数呢?本节就来解释这个问题.在讲例 18.1 “最简单的汇编程序”时,我们的汇编和链接步骤是: $ as hello.s -o hello ...

  10. Java 延时常见的几种方法

    1. 用Thread就不会iu无法终止 new Thread(new Runnable() { public void run() { while (true) { test(); try { Thr ...