今日写一段测试代码,实现的功能是,当一个输入框获得焦点时,某个帮助窗体跟随在其下方显示。代码很简单,本来没有什么值得一提的。但实验的时候发现,有些控件能较好地跟随,但有些不能,而且距离十分远。

主要代码如下(跟随窗体中):

Point p = ctrl.PointToScreen(ctrl.Location);
            p.X += 10;
            p.Y += ctrl.Height + 1;

lblDebugPoint.Text = string.Format("X: {0}, \r\nY: {1}", p.X, p.Y);
            this.Location = p;
            txtSearch.Focus();
            Show();

问题出现在哪里呢?经过一翻思索,也翻阅了一些文章。发现原来问题出现在第1句。

ctrl.PointToScreen(ctrl.Location);

ctrl.Location是什么?它是此控件相对于其容器的位置,ctrl.PointToScreen又是基于本控件来计算的。标准不一致,这还不乱套吗?

修改起来也不难,只需要统一标准就行,有两种方式:

Point p = ctrl.Parent.PointToScreen(ctrl.Location);

Point p = ctrl.PointToScreen(ctrl.ClientRectangle.Location);

最简单的代码上出了问题。

最新文章

  1. DrawerLayout 和 NavigationView 的使用
  2. 深入理解Objective-C:Category
  3. 设计数据库字段或者java中使用boolean型时需谨慎
  4. SASS 编译后去掉缓存文件和map文件
  5. final阶段成员贡献分
  6. sychronized 和 Lock的比较
  7. IOS开发中@2x图片等适应不同分辨率手机
  8. Java Socket编程示例
  9. [PHP] Eclipse开发PHP环境配置
  10. c++/c字符串操作汇集
  11. SQL Server 2008 游标使用实例
  12. 关于Modelsim仿真速度的优化
  13. Java反射_JDBC操作数据
  14. kindeditor更改图片上传时网络图片的路径
  15. HTML5实现图片选择并预览
  16. python读文件的三个方法read()、readline()、readlines()详解
  17. 代码文档生成工具Doxygen的使用备忘
  18. shell脚本:Kill掉MySQL中所有sleep的client线程
  19. nginx访问报错403 is forbidden
  20. 类加载, 静态变量初始化, String不可变, 泛型使用, 内部类

热门文章

  1. maven基本知识
  2. SQL 插入多行数据语句整理
  3. ubantu对pycharm创建快捷方式
  4. HDU 1014 Uniform Generator(最大公约数,周期循环)
  5. 【bzoj2763】[JLOI2011]飞行路线 (分层图最短路)(优先队列dij)
  6. Jenkins参数化构建Jenkins从文件中读取运行参数构建版本号
  7. 博弈论与SG函数
  8. [Lydsy1805月赛] 对称数
  9. 【kmp算法】poj2406 Power Strings
  10. 【分块】bzoj1901 Zju2112 Dynamic Rankings