c#中如何避免Button,CheckBox等的点击状态时的焦点矩形框问题:
2015-09-28 16:19
260 查看
方法一:
使用label控件替代;
方法二:
转移焦点:
利用一个label控件,将其BackColor设为透明,比如checkbox,在其enter事件中转移焦点即可,代码如下:
方法三:重绘控件:如button,代码如下:
1,第一种验证过:在重绘控件的构造函数中:
点击后不得到焦点且不影响当前焦点所在位置,类似系统计算器中按钮的效果。
可以实现无焦点的按钮、复选框、单选框等控件。
使用label控件替代;
方法二:
转移焦点:
利用一个label控件,将其BackColor设为透明,比如checkbox,在其enter事件中转移焦点即可,代码如下:
private void control_lose_focus() { lblHide.Focus(); }
private void chkAutoLogin_Enter(object sender, EventArgs e) { control_lose_focus(); //在enter的情况下转移焦点最佳 }
方法三:重绘控件:如button,代码如下:
1,第一种验证过:在重绘控件的构造函数中:
SetStyle(ControlStyles.Selectable, false);2,没验证,但是也可以:
public class MyButton : System.Windows.Forms.Button { public bool Selectable { get { return this.GetStyle(System.Windows.Forms.ControlStyles.FixedHeight); } set { this.SetStyle(System.Windows.Forms.ControlStyles.Selectable, value); } } }
使用时:
button1.Selectable=false; //设置不让捕获焦点; button1.Selectable=true; //设置可以捕获焦点,就和.net的Button完全一样。方法四:最绝:
private void SetButton(Button button) { MethodInfo methodinfo = button.GetType().GetMethod("SetStyle",BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod); methodinfo.Invoke(button,BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod,null,new object[] {ControlStyles.Selectable,false},Application.CurrentCulture); }
点击后不得到焦点且不影响当前焦点所在位置,类似系统计算器中按钮的效果。
可以实现无焦点的按钮、复选框、单选框等控件。
相关文章推荐
- C# .NET 发送邮件 代码
- C#实现二叉树遍历算法
- C# form 传参数的几个方法
- C#中form窗体之间的传递几个方法学习
- C#与闭包(closure)学习笔记
- C#与重构(入门)
- 基于C#实现简单离线注册码生成与验证
- C#委托(delegate、Action、Func、predicate)
- c# 使用protobuf
- C#开发中遇到问题常问题
- 控制台I/O
- C#中的MessageBox的show的各种重载方法使用
- C#编写的windows服务安装后启动提示“服务启动后又停止了”
- windbg调试C#代码(一)
- 编译生成.NET DLL并调用
- C#操作IIS方法集合
- c#创建ISS站点
- WPF中Style文件的引用——使用xaml代码或者C#代码动态加载
- C# 操作word总结(一)——建立文档和添加页眉页脚
- C#学习之事件