昨天写好的代码,今天早上一来运行不起来了,读取 this.Handle 时就会触发异常:"创建窗口句柄时出错",如果没有这句,在界面要显示时也一样会触发这个异常. 经过半天的分析,才发现下图所示的[DefWndProc]方法重写,正好满足第一个if条件而把所有的消息都拦截了,重新修改该方法判断条件,使其只处理要处理的消息,其他消息全部调用base.DefWndProc(ref m),问题解决
窗体Load事件中使用 textBox1.Focus(); 方式设置焦点始终不生效,查看该方法返回值也是false,查询微软文档,发现如下注解,改为textBox1.Select();后顺利解决 原文链接 Control.Focus 方法 (System.Windows.Forms) | Microsoft Docs
namespace WindowsForm { /// <summary> /// WMsg参数常量值 /// </summary> public class WMsg { //创建一个窗口 const int WM_CREATE = 0x01; //当一个窗口被破坏时发送 const int WM_DESTROY = 0x02; //移动一个窗口 const int WM_MOVE = 0x03; //改变一个窗口的大小 const int WM_SIZE = 0x05; //一个窗口被激…
修改工作项目一个基类中动态计算右侧按钮位置的方法,发现计算正确,派生类的显示无论是设计界面还是运行时界面,右侧按钮的显示位置却一直不对,最后发现是该按钮的[Anchor]属性被设置成[Top, Right],导致应该显示的位置和实际显示位置相差了基类和派生类的Width差值[如基类width=700,派生类width=500,按钮会在应显示位置左移200的位置处显示,反之则右移]. 结论:使用了[Anchor]属性就不要再去手动计算;使用了手动计算就不要设置[Anchor]属性.
C# 单例模式基类如何初始化子类 这篇文章中涉及到了线程操作,实际使用时发现如果方法Internal_Start()中睡眠时间较长(例如10秒),操作时在10秒内先调用stop再调用start方法时,希望停止的线程无法停止. 研究了后发现是因为使用的状态位是全局变量,再次调用start时,上一次的stop调用被改为false的状态位还未生效又被改回true,导致调用stop时应停止的线程无法终止同时又启动了一个新线程. 我的解决方法是增加两个全局变量,一个int值记录当前是第几次启动线程(从0开始计数,-1表示线程…