zoukankan      html  css  js  c++  java
  • 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,然后其他的操作不变,这样就会拖动绘制的图形时,滚动条不会跟着移动!

  • 相关阅读:
    SlimDX.dll安装之后所在位置
    使用正则表达式进行简单查找
    UDP-C#代码
    非Unicode工程读取Unicode文件
    模板类重载<<运算符
    ganglia及ganglia-api相关介绍
    keystone v3 相关介绍
    ubuntu下ssh使用proxy:corkscrew
    neutron用linux_bridge部署provider网络
    python thread的join方法解释
  • 原文地址:https://www.cnblogs.com/xiaolifeidao/p/3155274.html
Copyright © 2011-2022 走看看