自定义控件焦点有关问题
发布时间:2011-06-23 14:46:56 文章来源:www.iduyao.cn 采编人员:星星草
自定义控件焦点问题
写了个用户自定义控件,希望控件在获得焦点和失去焦点时候显示的外观不一样,比如获得焦点时显示一个黑色的外框,请问如何实现?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class xButton : UserControl
{
private bool bFocused = true;
public xButton()
{
InitializeComponent();
}
public void DrawControl(Graphics g)
{
if (bFocused)
{
Pen p = new Pen(Color.Black, 1);
g.DrawRectangle(p, 0, 0, this.Width - 1, this.Height - 1);
p = null;
}
Pen p1 = new Pen(Color.AliceBlue, 1);
Pen p2 = new Pen(Color.Gray, 1);
Pen p3 = new Pen(Color.DarkGray, 1);
g.DrawRectangle(p2, 1, 1, this.Width - 3, this.Height - 3);
g.DrawLine(p1, 2, 2, this.Width - 3, 2);
g.DrawLine(p1, 2, 2, 2, this.Height - 3);
g.DrawLine(p3, this.Width - 3, 2, this.Width - 3, this.Height - 3);
g.DrawLine(p3, 2, this.Height - 3, this.Width - 3, this.Height - 3);
p1 = null;
p2 = null;
p3 = null;
}
private void UserControl1_Paint(object sender, PaintEventArgs e)
{
DrawControl(e.Graphics);
}
private void UserControl1_Click(object sender, EventArgs e)
{
this.Focus();
bFocused = true;
}
}
}
------解决方案--------------------
重写下面3个方法:
在 OnPaint 里判断 bFocused 然后画(用 e.Graphics.DrawRectangle 就好了,不用4边画4条线。。。)
在 OnEnter 里设 bFocused = true 然后调用 Me.Refresh() 触发 OnPaint
在 OnLeave 里设 bFocused = false 同样调用 Me.Refresh() 触发 OnPaint
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
c# 类库打包成COM类型库时在vs命令行怎么写
类库打包成COM类型库(在vs命令行中怎么写啊)
路径和格式怎么写?
假如路径是:F:\netTest...
-
int
c#里的int是多少位???????
------解决方案--------------------
int 的值用 31 位来表示,第三十二位为符号位。,其范围从负 2,147,483...
-
求各位大侠帮个忙
做的是一个项目经理评分系统
如何把第一个窗体点击的人的信息显示到第二个窗体里面
------解决方案---------...
-
【asp.net三层怎样入手学习开发?】
我现在搞asp.net都是面向过程的.没有分层
请问怎样做到 mvc ??真正的面向对象的开发??
请问...
-
.net framework 2.0 service pack 1 无法卸载,怎么办
总是提示说安装是发生严重错误,并且说it will affect other application that...
-
Message.Show()的窗体美化
每次弹出的窗口都是那么的单调有没有什么方法能换一下弹出窗体的颜色或者是插一张图片
------解决方...
-
安装vs2010出错,求老师解答!!!
rt
安装vs2010是出错
C:\Users\Administrator\AppData\Local\Temp\SIT32027.tmp\deffactory...
-
怎么做一个转盘出来啊,请教各位大虾
在ASP.NET的页面中怎么弄一个转盘出来啊?
------解决方案--------------------
什么转盘
---...
-
jquery each遍历赋值不上呢
<ul id="myul">
<li><a id="2258">第一个</a></li>
<li><a id="2258">第二个</a></li>
<li>...
-
C#发布问题
这个是怎么回事啊
我在那个debug下面有那个DevExpress.XtraLayout.v9.1.dll这个了 为什么还是报这个错
------解决...