Home All Groups Group Topic Archive Search About

Winforms User COntrol

Author
29 Jul 2006 9:48 AM
Sara
Hello there,

  Iam creating a user control with 2 buttons, And i have a public
static variable  i'll be changing the value of the variable in the
button click events.


When i consume the user control in the winforms application how to
automatically get the value of the public variable on click of the user
control.

user control code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace WindowsControlLibrary2
{
    public partial class UserControl1 : UserControl
    {
public static string msButtonClicked;

        public UserControl1()
        {
            InitializeComponent();
        }

        public UserControl1(Delegate p)
        {
            InitializeComponent();
         }


        private void Button1_Click(object sender, EventArgs e)
        {
            msButtonClicked = "Val1";
        }

        private void Button2_Click(object sender, EventArgs e)
        {
            msButtonClicked = "Val2";
        }

        private void Button3_Click(object sender, EventArgs e)
        {
            msButtonClicked = "Val3";
        }

        private void Button4_Click(object sender, EventArgs e)
        {
            msButtonClicked = "Val4";
        }

    }
}


consuming page
i want value to be popped up in userControl11_click event
private void userControl11_Load(object sender, EventArgs e)
        {

MessageBox.Show(WindowsControlLibrary2.UserControl1.msButtonClicked);
            //EventHandler handler = new EventHandler(a);
            //userControl11.Click += handler;
        }


Regards
Saravanan K

Author
30 Jul 2006 4:28 AM
iwdu15
wrong newsgroup, try the C# newsgroup:
http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.dotnet.languages.csharp

they can prob help you out
--
-iwdu15
Author
31 Jul 2006 1:52 PM
Jim Wooley
It sounds like you are breaking encapsulation. As an alternative, I would
recommend that you have a single public property against which you program
your consuming classes. Perhaps you could just override .Text and return
a private string msButtonClicked (which should not be static). Public fields
are typically considered bad OOP practice.

Alternatively, you could just have the .Text accessor check the value of
the internal boxes and return the appropriate string, thereby eliminating
the need for msButtonClicked as a string anyway. On property Set, you can
set the private string and click the appropriate internal button. All of
the internal buttons should be scoped private (or protected), not public
to maintain the encapsulation.

For your messaging back to the consuming form, your control should raise
a custom event (perhaps "Changed") whenever an internal button is clicked.
The form would add a handler to the user control's Changed event rather than
any internal event handlers. Once you make these changes, your form will
only need to be concerned with the following: .Text (property) and .Changed
(event). Everything else will be encapsulated inside of the user control.

Jim Wooley
http://devauthority.com/blogs/jwooley/default.aspx

Show quoteHide quote
> Hello there,
>
> Iam creating a user control with 2 buttons, And i have a public
> static variable  i'll be changing the value of the variable in the
> button click events.
>
> When i consume the user control in the winforms application how to
> automatically get the value of the public variable on click of the
> user control.
>
> user control code
>
> using System;
> using System.Collections.Generic;
> using System.ComponentModel;
> using System.Drawing;
> using System.Data;
> using System.Text;
> using System.Windows.Forms;
> namespace WindowsControlLibrary2
> {
> public partial class UserControl1 : UserControl
> {
> public static string msButtonClicked;
> public UserControl1()
> {
> InitializeComponent();
> }
> public UserControl1(Delegate p)
> {
> InitializeComponent();
> }
> private void Button1_Click(object sender, EventArgs e)
> {
> msButtonClicked = "Val1";
> }
> private void Button2_Click(object sender, EventArgs e)
> {
> msButtonClicked = "Val2";
> }
> private void Button3_Click(object sender, EventArgs e)
> {
> msButtonClicked = "Val3";
> }
> private void Button4_Click(object sender, EventArgs e)
> {
> msButtonClicked = "Val4";
> }
> }
> }
> consuming page
> i want value to be popped up in userControl11_click event
> private void userControl11_Load(object sender, EventArgs e)
> {
> MessageBox.Show(WindowsControlLibrary2.UserControl1.msButtonClicked);
> //EventHandler handler = new EventHandler(a);
> //userControl11.Click += handler;
> }
> Regards
> Saravanan K