By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
457,728 Members | 1,165 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 457,728 IT Pros & Developers. It's quick & easy.

How to call a form-Parent function that does not even yet to develop

P: n/a

Hi All,

I just wonder if in C#, I can develop a user defined control that can call
its parent function which is not yet developed. For example, how do I make
my user control call a to-be-developed-function cmdOkay_Click() function as
described below.

1. Create an user control that contains an OK button as below

Public Class MyButton:System.Windows.Form.UserControl
{
protected System.Windows.Form.Button cmdOkay;
.....
.....
}

2. In the cmdOkay_Click() event, call a function in the parent (the parent
is a form whichever this control will be placed on)

Public Class MyButton:System.Windows.Form.UserControl
{
protected System.Windows.Form.Button cmdOkay;
.....
.....

private void cmdOkay_Click(object sender,System.EventArgs e)
{

// This one is easy, because the ParentForm.Close() function is
known.
this.ParentForm.Close();
// But I want to do this.
this.ParentForm.cmdOkay_Click();
// Or even better, passing the parameters

this.ParentForm.cmdOkay_Click(object sender,System.EventArgs e)


}
}
Thanks.
Nov 15 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
David
You have to have your control raise an event and the parent form will have
to handle that event. Its the same as the button in your example.
Microsoft cant know how every form will handle the button so they raise the
button click event and you will write a handler. In the same way, you wont
know how your control is going to be used, so you have to raise an event and
then handle it in the form as you want it used :)

Hope it helps
Mark

" David N" <dq*****@netiq.com> wrote in message
news:Ok*****************@TK2MSFTNGP10.phx.gbl...

Hi All,

I just wonder if in C#, I can develop a user defined control that can call
its parent function which is not yet developed. For example, how do I make my user control call a to-be-developed-function cmdOkay_Click() function as described below.

1. Create an user control that contains an OK button as below

Public Class MyButton:System.Windows.Form.UserControl
{
protected System.Windows.Form.Button cmdOkay;
.....
.....
}

2. In the cmdOkay_Click() event, call a function in the parent (the parent is a form whichever this control will be placed on)

Public Class MyButton:System.Windows.Form.UserControl
{
protected System.Windows.Form.Button cmdOkay;
.....
.....

private void cmdOkay_Click(object sender,System.EventArgs e)
{

// This one is easy, because the ParentForm.Close() function is known.
this.ParentForm.Close();
// But I want to do this.
this.ParentForm.cmdOkay_Click();
// Or even better, passing the parameters

this.ParentForm.cmdOkay_Click(object sender,System.EventArgs e)

}
}
Thanks.

Nov 15 '05 #2

P: n/a
Mark,

Thanks for you reply.

Can you show me an example of how to raise an event in my control. Or can
you direct me to a URL that has an example of it?

Thanks.
"Mark" <f1*****@hotmail.com> wrote in message
news:OI**************@TK2MSFTNGP12.phx.gbl...
David
You have to have your control raise an event and the parent form will have
to handle that event. Its the same as the button in your example.
Microsoft cant know how every form will handle the button so they raise the button click event and you will write a handler. In the same way, you wont know how your control is going to be used, so you have to raise an event and then handle it in the form as you want it used :)

Hope it helps
Mark

" David N" <dq*****@netiq.com> wrote in message
news:Ok*****************@TK2MSFTNGP10.phx.gbl...

Hi All,

I just wonder if in C#, I can develop a user defined control that can call its parent function which is not yet developed. For example, how do I

make
my user control call a to-be-developed-function cmdOkay_Click() function

as
described below.

1. Create an user control that contains an OK button as below

Public Class MyButton:System.Windows.Form.UserControl
{
protected System.Windows.Form.Button cmdOkay;
.....
.....
}

2. In the cmdOkay_Click() event, call a function in the parent (the

parent
is a form whichever this control will be placed on)

Public Class MyButton:System.Windows.Form.UserControl
{
protected System.Windows.Form.Button cmdOkay;
.....
.....

private void cmdOkay_Click(object sender,System.EventArgs e)
{

// This one is easy, because the ParentForm.Close() function

is
known.
this.ParentForm.Close();
// But I want to do this.
this.ParentForm.cmdOkay_Click();
// Or even better, passing the parameters

this.ParentForm.cmdOkay_Click(object sender,System.EventArgs

e)


}
}
Thanks.


Nov 15 '05 #3

P: n/a

Hi David,
*
Because the user control is developed for general use, you can not call the
parent formís method explicitly.
However, you can use delegate to achieve this.
You can implement a delegate which points to your cmdOkay_Click() method in
parent form and pass it to your user control to invoke.
*
My sample code is listed below:

"Usercontrol.cs"

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

namespace test
{
public class UserControl1 : System.Windows.Forms.UserControl
{
private Delegate pointer;
private System.ComponentModel.Container components = null;

public UserControl1()
{
InitializeComponent();
}

public UserControl1(Delegate p)
{
InitializeComponent();
this.pointer =p;
}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Component Designer generated code

private void InitializeComponent()
{
this.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.Name = "UserControl1";
this.Click += new System.EventHandler(this.UserControl1_Click);
this.Load += new System.EventHandler(this.UserControl1_Load);
this.DoubleClick += new
System.EventHandler(this.UserControl1_DoubleClick) ;

}
#endregion

private void UserControl1_Load(object sender, System.EventArgs e)
{

}

private void UserControl1_DoubleClick(object sender, System.EventArgs e)
{

}

private void UserControl1_Click(object sender, System.EventArgs e)
{
pointer.DynamicInvoke (null);
}
}
}

"Form1.cs"

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace d
{
public class Form1 : System.Windows.Forms.Form
{

private System.Windows.Forms.Label label1;
private test.UserControl1 userControl11;
private System.ComponentModel.Container components = null;

public delegate void delegatecall();
private event delegatecall pointer;
public void cmdOkay_Click()
{
label1.Text ="parent method called";
}
public Form1()
{
pointer+=new delegatecall(this.cmdOkay_Click );
InitializeComponent();
}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();

this.label1.Location = new System.Drawing.Point(96, 40);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(96, 64);
this.label1.TabIndex = 0;
this.label1.Text = "label1";

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(296, 238);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}
#endregion

[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{

}
}
}

Hope this helps.

Jeffrey Tan
Microsoft Online Partner Support
Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

--------------------
| From: " David N" <dq*****@netiq.com>
| References: <Ok*************@TK2MSFTNGP10.phx.gbl>
<OI**************@TK2MSFTNGP12.phx.gbl>
| Subject: Re: How to call a form-Parent function that does not even yet to
develop
| Date: Wed, 30 Jul 2003 08:29:27 -0700
| Lines: 90
| X-Priority: 3
| X-MSMail-Priority: Normal
| X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
| X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
| Message-ID: <Os**************@TK2MSFTNGP09.phx.gbl>
| Newsgroups: microsoft.public.dotnet.languages.csharp
| NNTP-Posting-Host: pat-50.bel.netiq.com 65.219.170.50
| Path: cpmsftngxa06.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTN GP09.phx.gbl
| Xref: cpmsftngxa06.phx.gbl microsoft.public.dotnet.languages.csharp:172992
| X-Tomcat-NG: microsoft.public.dotnet.languages.csharp
|
| Mark,
|
| Thanks for you reply.
|
| Can you show me an example of how to raise an event in my control. Or can
| you direct me to a URL that has an example of it?
|
| Thanks.
|
|
| "Mark" <f1*****@hotmail.com> wrote in message
| news:OI**************@TK2MSFTNGP12.phx.gbl...
| > David
| > You have to have your control raise an event and the parent form will
have
| > to handle that event. Its the same as the button in your example.
| > Microsoft cant know how every form will handle the button so they raise
| the
| > button click event and you will write a handler. In the same way, you
| wont
| > know how your control is going to be used, so you have to raise an event
| and
| > then handle it in the form as you want it used :)
| >
| > Hope it helps
| > Mark
| >
| > " David N" <dq*****@netiq.com> wrote in message
| > news:Ok*****************@TK2MSFTNGP10.phx.gbl...
| > >
| > > Hi All,
| > >
| > > I just wonder if in C#, I can develop a user defined control that can
| call
| > > its parent function which is not yet developed. For example, how do I
| > make
| > > my user control call a to-be-developed-function cmdOkay_Click()
function
| > as
| > > described below.
| > >
| > > 1. Create an user control that contains an OK button as below
| > >
| > > Public Class MyButton:System.Windows.Form.UserControl
| > > {
| > > protected System.Windows.Form.Button cmdOkay;
| > > .....
| > > .....
| > > }
| > >
| > > 2. In the cmdOkay_Click() event, call a function in the parent (the
| > parent
| > > is a form whichever this control will be placed on)
| > >
| > > Public Class MyButton:System.Windows.Form.UserControl
| > > {
| > > protected System.Windows.Form.Button cmdOkay;
| > > .....
| > > .....
| > >
| > > private void cmdOkay_Click(object sender,System.EventArgs e)
| > > {
| > >
| > > // This one is easy, because the ParentForm.Close()
function
| > is
| > > known.
| > > this.ParentForm.Close();
| > >
| > >
| > > // But I want to do this.
| > > this.ParentForm.cmdOkay_Click();
| > >
| > >
| > > // Or even better, passing the parameters
| > >
| > > this.ParentForm.cmdOkay_Click(object
sender,System.EventArgs
| > e)
| > >
| > >
| > >
| > >
| > > }
| > > }
| > >
| > >
| > > Thanks.
| > >
| > >
| >
| >
|
|
|

Nov 15 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.