在C#中如何重写控件

环境:C#WinForm由于程序须要我想重写Label控件(当然不是完全重写,是继承后).但是如果我重写后该怎么使用它呢?我想我重写后的控件还是所见即所得的,就是可以在V... 环境: C# WinForm

由于程序须要我想重写Label控件(当然不是完全重写,是继承后).
但是如果我重写后该怎么使用它呢?我想我重写后的控件还是所见即所得的,就是可以在VS里面编辑的那种.

不知道大家看明白我的意思没,我是说现在的问题是我不知道怎么重写后的控件还是所见即所得的,并且我还不知道重写后怎么使用它.最重要的是要直接在我工程里面写代码的,不要生成的DLL然后引用的那种.
一楼的朋友,按你的方法拖不进去呀.我用的是VS2005.
二楼的,你的方法太麻烦了.
展开
 我来答
百度网友e22b3912e
推荐于2018-03-14 · TA获得超过475个赞
知道小有建树答主
回答量:239
采纳率:0%
帮助的人:176万
展开全部
你按照下边的方法重写出来一个控件以后,复制粘贴这个控件就能出来很多个。就像一楼说的那样,很简单的,不麻烦。

1. 首先你把一个label控件拖到窗体上。

2. 创建一个准备继承的类,比如叫MyLabel,派生于Label类

class MyLabel : System.Windows.Forms.Label
{
// 你自己重写的内容
}
3. 打开Form1.Designer.cs文件,你会看到有这么一行。
private System.Windows.Forms.Label label1;
修改为
private MyLabel label1;

再找到this.label1 = new System.Windows.Forms.Label();
修改为this.label1 = new MyLabel();

然后编译,运行,此时窗体上的这个控件就是MyLabel类创造出来的了。
________________________________________________

或者这样也行,创建——Windows控件库,自己创建一个重写后的labal控件。
然后再工具箱——选择项,功能添加进来,就能“一劳永逸”了。
cnmahj
推荐于2016-04-21 · TA获得超过954个赞
知道小有建树答主
回答量:785
采纳率:0%
帮助的人:1064万
展开全部
在你的代码中保证包含如下代码即可

private System.ComponentModel.IContainer components = null;

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花招招手引神0
2008-03-21
知道答主
回答量:49
采纳率:0%
帮助的人:18.1万
展开全部
你可以建一个用户控键页面,编写你想的写的代码,之后在别的页面只须将其拖入就可以使用了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
2009我们的
推荐于2016-07-27 · TA获得超过1323个赞
知道小有建树答主
回答量:1238
采纳率:30%
帮助的人:368万
展开全部
/// <summary>
/// 覆盖窗口过程!处理WM_CHAR消息!
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
int charcode = (int)m.WParam;
switch (m.Msg)
{
case WM_CHAR:
// 遇到非法字符,直接return即可过滤非法字符!break表示处理该字符
//屏蔽小数点
if (charcode == (int)Keys.Decimal)
return;

// 注意delete,backspace字符不能过滤!!!
// ctrl-a,ctrl-c,ctrl-v快捷键操作不能屏蔽!
if (charcode == (int)Keys.Back || charcode == (int)Keys.Delete)
break;

//如果按下了CTRL键
if (charcode == 1 //ctrl a
|| charcode == 3 //ctrl c
|| charcode == 22 //ctrl v
|| charcode == 24 //ctrl x
)
break;

if (this.m_FilterStr.IndexOf((char)charcode) < 0)
return;
break;

case WM_KEYDOWN:
//ctrl-A 全选
if (Control.ModifierKeys == Keys.Control)
{
if(charcode==(int)Keys.A)
this.SelectAll();
}
break;

case WM_PASTE:
//粘贴消息
IDataObject obj = Clipboard.GetDataObject();
if (obj == null)
return;
if (obj.GetDataPresent(DataFormats.Text))
{
string text = obj.GetData(DataFormats.Text) as string;
if (text == null)
return;
foreach (char c in text)
{
//查看是否含有过滤字符以外的字符!
if (this.m_FilterStr.IndexOf(c) < 0)
return;
}
}
break;
}
//处理消息
base.WndProc(ref m);
}
控件是对数据和方法的封装。控件可以有自己的属性和方法。属性是控件数据的简单访问者。方法则是控件 的一些简单而可见的功能。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式