Winform控件中子控件的生成

breadjyh 2008-03-14 09:23:40
我做了一个Winform的控件,主要是做窗体的美化的,直接从winform继承的,然后重写了OnCreateControl事件,在此事件中利用IDesignerHost.CreateComponent来创建子控件,这样在创建控件的时候可以直接在窗体上生成所需要的子控件(也就是在Winform.Designer.cs文件中自动生成创建子控件的代码,这样就可以直接在窗体上对这些控件进行编辑了),但是在每次编辑实例化的窗体时都会再次生成创建子控件的代码,这样就会提示控件名称重复之类的错误,我试着在OnCreateControl中判断在窗体的Controls中是否已经存在了这些子控件,但是不起作用,大家有没有什么好的建议,多谢了
部份代码如下:
protected override void OnCreateControl()
{
base.OnCreateControl();
if (DesignMode)
{
IDesignerHost host = (IDesignerHost)Site.GetService(typeof(IDesignerHost));
if (???)
{
titleBar = host.CreateComponent(typeof(Panel), "titleBar") as Panel;
titleBar.Parent = this;
}
...
...全文
192 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
breadjyh 2008-03-14
  • 打赏
  • 举报
回复
能不能给个例子啊,我实在有点迷糊啊
changjiangzhibin 2008-03-14
  • 打赏
  • 举报
回复
可考虑在自定义控件中用一个静态的布尔值来控制,
由于自定义的控件是一起生成的,只需要判断其中某一个控件里已生成即可
nik_Amis 2008-03-14
  • 打赏
  • 举报
回复
mark
qiyousyc 2008-03-14
  • 打赏
  • 举报
回复
foreach(Control cn1 in this.Controls)
{
if(cn1.Name.ToLower()!="")
this.Controls.Add....
}
breadjyh 2008-03-14
  • 打赏
  • 举报
回复
我用了Controls.contain不起作用
qiyousyc 2008-03-14
  • 打赏
  • 举报
回复
生成前,先遍历控件,看是否存在,存在就不产生了。
ljm66 2008-03-14
  • 打赏
  • 举报
回复
Controls.Find()就可以解决啊
rangeon 2008-03-14
  • 打赏
  • 举报
回复
Controls.Find()找不到吗?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧