events from child to parent form.

I

Ibrahim.

Hello,

I have a user control which is dynamically added to a Form object (mdi
child). and mdi child parent is mdi main.

usercontrol->mdi child -> mdi form.

i want to raise event in "usercontrol" and notify to the "mdiform" as shown
above.

any suggestions?

thanks.
 
M

Morten Wennevik [C# MVP]

Hi Ibrahim,

The UserControl needs to define an event which the parent form needs to
subscribe to.

The code below demonstrates how this can be done by inheriting a
NumericUpDown control which fires when the value is set to 2 as well as every
time the value is even. (It will fire on the initial 0 as well, but at that
time no event subscribers exists)

//parent form
protected override void OnLoad(EventArgs e)
{
MyUserControl myc = new MyUserControl();
Controls.Add(myc);

myc.ValueIs2 += new EventHandler(myc_ValueIs2);
myc.ValueIsEven += new
EventHandler<ValueEventArgs>(myc_ValueIsEven);
}

void myc_ValueIsEven(object sender, ValueEventArgs e)
{
MessageBox.Show("Value is even: " + e.Value);
}

void myc_ValueIs2(object sender, EventArgs e)
{
MessageBox.Show("The user control was set to 2");
}


// User control
public class MyUserControl : NumericUpDown
{
public event EventHandler ValueIs2;
public event EventHandler<ValueEventArgs> ValueIsEven;

public override string Text
{
get
{
return base.Text;
}
set
{
if (value == "2")
{
if (ValueIs2 != null)
ValueIs2(this, EventArgs.Empty);
}

if ((Convert.ToDecimal(value)) % 2 == 0)
{
if (ValueIsEven != null)
ValueIsEven(this, new ValueEventArgs(value));
}

base.Text = value;
}
}
}

// custom event args
public class ValueEventArgs : EventArgs
{
private string _value;

public string Value
{
get { return _value; }
set { _value = value; }
}

public ValueEventArgs(string value)
{
Value = value;
}
}
 
I

Ibrahim.

Hi,

Thanks for the code & the concept, it worked for me.

Thanks,

Morten Wennevik said:
Hi Ibrahim,

The UserControl needs to define an event which the parent form needs to
subscribe to.

The code below demonstrates how this can be done by inheriting a
NumericUpDown control which fires when the value is set to 2 as well as every
time the value is even. (It will fire on the initial 0 as well, but at that
time no event subscribers exists)

//parent form
protected override void OnLoad(EventArgs e)
{
MyUserControl myc = new MyUserControl();
Controls.Add(myc);

myc.ValueIs2 += new EventHandler(myc_ValueIs2);
myc.ValueIsEven += new
EventHandler<ValueEventArgs>(myc_ValueIsEven);
}

void myc_ValueIsEven(object sender, ValueEventArgs e)
{
MessageBox.Show("Value is even: " + e.Value);
}

void myc_ValueIs2(object sender, EventArgs e)
{
MessageBox.Show("The user control was set to 2");
}


// User control
public class MyUserControl : NumericUpDown
{
public event EventHandler ValueIs2;
public event EventHandler<ValueEventArgs> ValueIsEven;

public override string Text
{
get
{
return base.Text;
}
set
{
if (value == "2")
{
if (ValueIs2 != null)
ValueIs2(this, EventArgs.Empty);
}

if ((Convert.ToDecimal(value)) % 2 == 0)
{
if (ValueIsEven != null)
ValueIsEven(this, new ValueEventArgs(value));
}

base.Text = value;
}
}
}

// custom event args
public class ValueEventArgs : EventArgs
{
private string _value;

public string Value
{
get { return _value; }
set { _value = value; }
}

public ValueEventArgs(string value)
{
Value = value;
}
}


--
Happy Coding!
Morten Wennevik [C# MVP]


Ibrahim. said:
Hello,

I have a user control which is dynamically added to a Form object (mdi
child). and mdi child parent is mdi main.

usercontrol->mdi child -> mdi form.

i want to raise event in "usercontrol" and notify to the "mdiform" as shown
above.

any suggestions?

thanks.
 

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