如题,就是给usercontrol添加一个click事件把usercontrol中lable的值取出来,winform的,求大神指点一下
public string labval1
        {
            get
            {
                return label1.Text;
            }
            set
            {
                this.label1.Text = value;
            }
        }
        public string labval2。
   
这是自定义控件中2个lable的属性设置,我可以更改和读取lable中的值,现在要实现的是我开始问的那个功能,现在我能做到点击usercontrol中没有被Label覆盖的空白部分获取lable的值,但是被lable覆盖的就不行了c#自定义控件winform

解决方案 »

  1.   

    可以发布一个属性,get{return lable1.Text;}
    还可以通过自定义事件(委托)去传递
      

  2.   

    在usercontrol中将label1的onclick重写指向usercontrol的onclick
      

  3.   


    using System;
    using System.Collections.Generic;
    namespace Demo
    {
        interface IMessage
        {
            void Update(string msg);
        }
        abstract class IMessageSubject
        {
            protected string msg;
            public string Msg
            {
                get { return msg; }
                set { msg = value; Notify(); }
            }
            private IList<IMessage> list = new List<IMessage>();        public void Add(IMessage m)
            {
                list.Add(m);
            }
            public void Remove(IMessage m)
            {
                list.Remove(m);
            }
            public void Notify()
            {
                foreach (IMessage i in list)
                {
                    i.Update(msg);
                }
            }
        }
        class A : IMessageSubject
        {
            private string lbl = "A label text!";
            public void Click()
            {
                Msg = lbl;
            }
        }    class B : IMessage
        {
            public void Update(string msg)
            {
                Console.WriteLine("B receive " + msg);
            }
        }    class C : IMessage
        {
            public void Update(string msg)
            {
                Console.WriteLine("C receive " + msg);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                IMessageSubject subject = new A();
                IMessage i1 = new B();
                IMessage i2 = new C();
                subject.Add(i1);
                subject.Add(i2);
                (subject as A).Click();
                subject.Remove(i1);
                (subject as A).Click();
                Console.ReadLine();
            }
        }
    }
      

  4.   


    这个是在我引用usercontrol的窗体中为他添加的click事件,运行时点usercontrol中被其中的label覆盖的部分没反应,没有覆盖的可以实现效果,关键是触发这个事件吧
     private void usercontrol_click(object sender, EventArgs e)
            {       
                label1.Text = userControl11.labval1;
                label2.Text = userControl11.labval2;
            }
      

  5.   


    usercontrol load:foreach (Control ctl in this.Controls)
    {
        if (ctl is Label)
        {
             ctl.Click += delegate(object sender, EventArgs e) { this.OnClick(e); };
        }
    }
      

  6.   

    引用 2 楼 llxzj60 的回复:
    在usercontrol中将label1的onclick重写指向usercontrol的onclick
    大神,能具体些么,咋个重写法?
    我不是大神,usercontrol里可以override onclick,你在写方法的地方打override+空格就可以出来了