For VS2005
这个用户控件有一个DataGridView成员    public partial class TemplateDDC : UserControl
    {
        #region 事件
        public event EventHandler Button1Click = null;
        #endregion
        #region 属性
        public DataGridView DataGridView
        {
            get { return this.dataGridView1; }
            set { dataGridView1 = value; }
        }
        #endregion
        public TemplateDDC()
        {
            InitializeComponent();
        }        void button1_Click(object sender, EventArgs e)
        {
            if (Button1Click != null)
                Button1Click(sender, e);
        }
    }

解决方案 »

  1.   

    这个用户控件继承自ComboBox    public class TemplateEC:ComboBox
        {
            private ToolStripControlHost controlHost;
            private ToolStripDropDown dropDown;
            private TemplateDDC tddc;
            public TemplateEC()
            {
                tddc = new TemplateDDC();
                tddc.Button1Click += new EventHandler(tddc_Button1Click);            controlHost = new ToolStripControlHost(tddc);            dropDown = new ToolStripDropDown();
                dropDown.Width = this.Width;
                dropDown.Items.Add(controlHost);
            }        void tddc_Button1Click(object sender, EventArgs e)
            {
                /*if (dropDown != null)
                {
                    this.Tag = tddc.textBox1.Text;
                    this.Text = tddc.textBox1.Text;
                    dropDown.Close();
                }*/
            }        public void showDropDown()
            {
                if (dropDown != null)
                {
                    dropDown.Size = new System.Drawing.Size(DropDownWidth - 2, DropDownHeight);
                    dropDown.Show(this, 0, this.Height);
                }
            }        protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case 0x201:
                    case 0x203:
                        showDropDown();
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }
            }        protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    if (dropDown != null)
                    {
                        dropDown.Dispose();
                        dropDown = null;
                    }
                }
                base.Dispose(disposing);
            }
        }