events from child to parent form.

  • Thread starter Thread starter Ibrahim.
  • Start date Start date
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.
 
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;
}
}
 
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

Back
Top