Winforms User COntrol

S

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
 
J

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top