Interoperation between custom controls - General Discussions - General Discussions - Progress Community
 General Discussions

Interoperation between custom controls

  • Interoperation between custom controls
  • Hi! I use ASP.NET Server Control Library to develop custom controls for sitefinity.
    It looks like this:

    Both controls are inherit from SimpleView and use LayoutTemplateName from "Resources.Views". This works fine.
    Control1 has a Label control:
            protected virtual Label Label1
           
                get
               
                    return base.Container.GetControl<Label>("Label1", true);
               
           
    Control2 has TextBox and Button controls:
            protected virtual TextBox TextBox1
           
                get
               
                    return base.Container.GetControl<TextBox>("TextBox1", true);
               
           
            protected virtual Button Button1
           
                get
               
                    return base.Container.GetControl<Button>("Button1", true);
               
           

    Please, explain me how can I interop between these controls. For example, on Control2.Button1.Click Control1.Label1.Text should be changed to value of Control2.TextBox1.Text.

    I do next,
    On Control2.cs:
        public delegate void Control2ChangedEventHandler(object sender, Control2ChangedEventArgs e);
        public class Control2ChangedEventArgs : EventArgs
       
            private string _text;
            public Control2ChangedEventArgs(string text)
           
                _text = text;
           
            public string ChangedText
           
                get return _text;
           
       
        public event Control2ChangedEventHandler Changed;
        protected override void InitializeControls(GenericContainer container)
       
            this.Button1.Click += new EventHandler(Button1_Click);
       
        void Button1_Click(object sender, EventArgs e)
       
            if (Changed != null) Changed(sender, new Control2ChangedEventArgs(this.TextBox1.Text));
       

    On Control1.cs:
       // Declaration of Сontrol2
       protected Control2 _control2;
            protected override void InitializeControls(GenericContainer container)
           
                this._control2 = (Control2)this.Page.FindControl("Control2");
                this._control2.Changed += new Control2ChangedEventHandler(_control2_Changed);
           

            void _control2_Changed(object sender, Control2ChangedEventArgs e)
           
                this.Label1.Text = e.ChangedText;
           

    But I've got an "Object not reference to instance of an object" error using FindControl method to find Control2 instance. How can I find it? May be there are other ways of interoperation between custom controls?

    Thanks in advance for your help,
    Vladislav.
  • Hi Vladislav,

    Use a query string value. When you click the button append a query string key in the url and read this value from the second control.

    Regards,
    Ivan Dimitrov
    the Telerik team