谢谢!
解决方法 我假设“伪设计模式”你的意思是你的应用程序处于运行时状态,最终用户正在体验“虚拟设计模式”:如果我错了,请纠正我.但是,我假设您指的是设计时间’控件的锁定属性,并且您希望在运行时“模拟”这个…正确吗?
我还假设您将鼠标向上/向下/移动处理程序附加到您允许移动的控件上,可能是通过循环遍历表单上的控件的全部或部分(或者您正在维护控件的集合)允许被移动).
如果我的假设是正确的,我会去除当你需要禁用控制移动时移动的事件处理程序,然后在需要允许再次移动控件时恢复这些事件处理程序.
一个主要原因是,imho,严格控制事件处理的“最佳实践”(将事件处理程序“就地”留下来可能会干扰对象处理……虽然这可能绝不适用于您的场景).
还有一个想法:你有一个“隐形”面板停靠’填充到表单:在这个面板上是所有可以移动的控件:这可以让你更容易“缩小你的注意力”你控制“花”这个额外代码.使用这种方法的缺点通常是:
>如果你使用hostingForm.ActiveControl来确定哪个控件获得了mousedown(因此可以移动):你会发现一些控件,比如标签和图片框,在点击时不会成为表单的主动控件,但是最做的.
>你有一个“z-order”的东西要考虑,因为你的面板中没有封装你希望允许在伪透明面板后发送的控件的控件将被隐藏.
由于这些原因,我认为禁用和重新启用事件处理程序附件是最好的,最简单的,因为当控件“向下转换”到其控件“身份”时可以完成:
private voID enableControlsMove(){ foreach (Control theControl in panel1.Controls) { Console.Writeline(theControl.name); theControl.MouseDown += new MouseEventHandler(theControl_MouseDown); theControl.MouseUp += new MouseEventHandler(theControl_MouseUp); theControl.MouseMove += new MouseEventHandler(theControl_MouseMove); }}private voID disableControlsMove(){ foreach (Control theControl in panel1.Controls) { Console.Writeline(theControl.name); theControl.MouseDown -= theControl_MouseDown; theControl.MouseUp -= theControl_MouseUp; theControl.MouseMove -= theControl_MouseMove; }}
我这样用它.
比尔,最好的
总结以上是内存溢出为你收集整理的C#Lock WinForm控件全部内容,希望文章能够帮你解决C#Lock WinForm控件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)