winform中关于panel中滚动条和键盘事件几点体会
2013-06-25 19:09
483 查看
最近在做winform开发中,遇到几个比较寄售的问题,通过上网查找计和自己琢磨,最终都圆满解决呢!
现在我将谈谈我在项目中遇到的问题集解决方案,以供大家参考!
一、就是我在使用键盘的keydown事件时,我上下移动键盘的方向键时,发现不仅控件没移动,反而控件所在的页面的滚动条随着方向键的上下移动而变化,我开始以为是选择的控件没有获得焦点才导致滚动条发生变化,但是我尝试强制给控件添加焦点,滚动条还是变化!后来我分析可能是给添加控件的键盘事件不对,可是键盘常用的事件就那几个,逐一尝试后,发现还是不能控制滚动条的位置。后来经过上网搜索,最后发现必须得重写键盘事件才行。
默认的是返回这个 return base.ProcessCmdKey(ref msg, keyData);
发现返回true后,keydown事件无法正确执行,所以得得在返回true后重新这些事件
二、还是与滚动条有关。
具体的情形是这样的我在页面上添加了一个panel,设置pane的滚动条可见,然后再panel上绘制图形,可是当我发现绘制图形时没有问题,可是当我在panel的的最下面绘制图形时,这是图形的大小就会随着滚动条的移动变大。而且但我想将绘制的线条移动到顶部或是底部区域时,滚动条会随着一起移动,这样就会造成移动的图形就不能正确定位到所需的位置。后来经过查找,最后找到了一比较简单的处理方式。
就是重写panel,具体的步骤是这样的:首先重写panel
其次就是原先在页面上直接拖panel,现在改为直接拖HJYPanel这个改写后的panel,然后其他的操作不变,这样就会拖动绘制的图形时,滚动条不会跟着移动!
现在我将谈谈我在项目中遇到的问题集解决方案,以供大家参考!
一、就是我在使用键盘的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控件有滚动条时图形如何重绘以及如何加入点击滚动条事件
- 关于winform中panel中控件不随滚动条移动的解决办法。
- C# WinForm中Panel实现用鼠标操作滚动条的实例方法
- asp.net页面触发事件panel滚动条高度不变的实现方法
- 关于IOS设备window onscroll滚动条滚动事件不触发的问题
- Ext.关于textfield的键盘事件的监听
- 关于外汇交易的几点体会
- WinForm下的键盘事件(KeyPress、KeyDown)及如何处理不响应键盘事件
- WinForm:关于滚动条的基础知识
- WinForm下的键盘事件(KeyPress、KeyDown)及如何处理不响应键盘事件
- 控制WinForm控件上的键盘,鼠标事件响应
- 关于软件外包项目管理的几点体会(本文版权归吴兵本人所有,谢绝转载!谢谢!)
- winform键盘事件的响应(C#)
- C#winform处理鼠标和键盘事件
- winform中键盘和鼠标事件的捕捉和重写
- 关于js键盘事件
- 关于键盘KeyDown事件
- java关于JTextField设置键盘输入事件
- C#中winform实现自动触发鼠标、键盘事件的方法