llx529(白日梦),你好,期待你的答复,最好能贴一段代码以供参考,感谢!

解决方案 »

  1.   

    第一个问题:
    不知道能不能指定默认的构造函数(估计难啊)。第二个问题简单:首先,自定义一个ClickedEventArgs 和 delegate,例如:
    public delegate void ClickedEventHandler(object sender, ClickedEventArgs e);
    public class ClickedEventArgs
    {
       ....
    }然后,给控件加事件:
    public event ClickedEventHandler Clicked;
      

  2.   

    FJGoodGood(_FJ_强中强),你好,我这个组件有多个事件,我的问题是当在WebForm的设计器上双击这个组件时,能自动转到一个默认的事件上。就象Button有好几个事件,但Click应该是默认事件一样,当在设计器上双击Button时,就自动生成Button1_Click()方法以及对Click事件的预订。请问这种功能如何实现?
      

  3.   

    1.如果是带参数的构造函数,你参数怎么能提前传递呢?
    试试添加个属性,属性应用[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]。
    然后在这个属性里初始化个帮助类,带有this参数。
    帮助类应用[TypeConverterAttribute(typeof(System.ComponentModel.ExpandableObjectConverter))]
    帮助类完成初始化工作。
    2.给class应用DefaultEvent属性
      

  4.   

    psn(psn),谢谢你的回答,如果我们编写一个继承自Component的组件,在客户端把它拉到Web设计器的页面上,就发现生成的页面代码是这样的: public class WebForm1 : System.Web.UI.Page
    {
    protected SyniWorx.WebUI.Shared.Component1 component11;
    private System.ComponentModel.IContainer components;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.components = new System.ComponentModel.Container();
    this.component11 = new SyniWorx.WebUI.Shared.Component1(this.components); // 我想把这里的参数换我的(this.components, this)行不行?
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }注意程序的倒数第6行,程序调用的是一个参数为this.components的构造函数,我想让它改为调用另一个构造函数(多了一个Page对象)。这里如果你说参数不能提前传递,那么为什么它传刚刚实例化的Container就可以呢?所以我想我的要求也应该是可以做到的。
    第2个问题就象你说的那样,比较容易。谢谢。
      

  5.   

    to 楼主,在类定义前面加一个属性:[DefaultEvent("XXXChanged")] 就可以了。
      

  6.   

    to winxieddd(一剑飘香(找工作)) ,你好,
    不太明白你的意思,你是说手动修改设计器自动生成的代码吗?那样不行,会出问题的,设计器会删除你改写的代码的。
      

  7.   

    winxieddd(一剑飘香(找工作)), 你好,
    我在这里只是想把当前页面作为参数传给组件,当然我也可以自己在代码文件中写实例化组件的语句并传送this参数,只不过我想把这个组件做的更完美些,因为有可能把它给其它人用,所以用起来越简单越好。我参考了.NET工具箱中自带的几个组件,比如Timer、SqlDataAdapter等,发现做的都很完美,拖拉的时候由设计器自动生成初始化语句,有的还能自动添加一些其它功能的辅助语句。所以我觉得我的想法应该是可以实现的。我现在正在看psn(psn)推荐的ComponentDesigner等设计器支持类,又学到不少新东西。希望能很快把这个问题解决。