菜鸟求助,组件的问题

bjddd192 2008-10-07 04:01:30
我写了一个组件,用下面语句描述,在工具箱里面能够看见我的组件,可是拖出来,它老是跑到设计面板下面去了(比如窗体),
我希望能够把它拖出来就显示到设计面板上,当然我试了把[Designer(typeof(CompDesigner1))]去掉就可以了,不过我在
CompDesigner1中给组件加了几个菜单,用来自动生成一些熟悉,所以我希望能够显示出控件,这些自定义的菜单也能保留,我知道这样肯定是可以的,VS自带了许多控件都有这个功能,比如combobox,鼠标瞄上面后,它的右上角会出现一个小箭头,点击就会出来一系列菜单,我就是想实现这个效果,请大师们指教,下面是我类的申明:

[ToolboxItem(true)]
[ToolboxBitmap(@"D:\BjdddCSharpDev\Components\Resources\1.bmp")]
[Designer(typeof(CompDesigner1))]
public partial class ComponentTest1 : PictureBox

其中CompDesigner1继承于: public class CompDesigner1 : ComponentDesigner
...全文
627 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
whycom 2008-10-07
  • 打赏
  • 举报
回复
可以,启动两个vs.net ,一个加载控件,一个附加到那个vs.net 的进程
bjddd192 2008-10-07
  • 打赏
  • 举报
回复
还有个问题很想问下,自定义的组件,里面的代码怎么能不能调试的?
bjddd192 2008-10-07
  • 打赏
  • 举报
回复
我的代码是:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel.Design;
using System.Windows.Forms;
using System.ComponentModel;
using System.Windows.Forms.Design;

namespace Bjddd.Dev.Components
{
public class CompDesigner1 : DocumentDesigner
{
ComponentTest test;
IDesignerHost host;
IComponentChangeService service;
DesignerTransaction designTran;
string testName;

DesignerVerbCollection m_verbs;

public override DesignerVerbCollection Verbs
{
get
{
if (m_verbs == null)
{
m_verbs = new DesignerVerbCollection();
m_verbs.Add(new DesignerVerb("生成东东", new EventHandler(OnGen)));
m_verbs.Add(new DesignerVerb("生成DD", new EventHandler(OnDD)));
}
return m_verbs;
}
}

private void OnGen(object sender, EventArgs e)
{
if (Component is ComponentTest)
{
test = (ComponentTest)Component;
host = (IDesignerHost)GetService(typeof(IDesignerHost));
testName = TypeDescriptor.GetProperties(Component)["Name"].GetValue(Component).ToString();

if (host == null)
{
return;
}

if (test.ID != 1000000)
{
designTran = host.CreateTransaction();
service = (IComponentChangeService)GetService(typeof(IComponentChangeService));
test.ID = 1000000;
service.OnComponentChanged(test, null, null, null);
designTran.Commit();
MessageBox.Show("生成成功!");
}
}
}

private void OnDD(object sender, EventArgs e)
{
if (Component is ComponentTest)
{
test = (ComponentTest)Component;
host = (IDesignerHost)GetService(typeof(IDesignerHost));
testName = TypeDescriptor.GetProperties(Component)["Name"].GetValue(Component).ToString();

if (host == null)
{
return;
}

if (test.Fields != null)
{
designTran = host.CreateTransaction();
service = (IComponentChangeService)GetService(typeof(IComponentChangeService));
test.Fields.Add(1);
test.Fields.Add(2);
service.OnComponentChanged(test, null, null, null);
Button b = (Button)host.CreateComponent(typeof(Button));

designTran.Commit();
MessageBox.Show("生成成功!");
}
}
}

}
}
bjddd192 2008-10-07
  • 打赏
  • 举报
回复
非常感谢,但是我生成后拖出来抛错,不知道是什么原因
抛错如下:服务容器中已存在服务System.Windows.Forms.Design.IEventHandlerService.
参数名:serviceType
请帮我分析下,谢谢
whycom 2008-10-07
  • 打赏
  • 举报
回复
try

public class CompDesigner1 : ComponentDesigner
=》
public class CompDesigner1 : DocumentDesigner

110,546

社区成员

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

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

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