Binding Form Closing event in class - c#

Hello I'm trying to make a class that can handle the form closing event for my winForm
I have figured out how to work the event handlers, like this for a ContextMenuStrip items click event:
mnuItemShow.Click += new EventHandler(mnuItemShow_Click);
private void mnuItemShow_Click(object sender, EventArgs e)
{
}
But I can't figure out how to bind the Form Closing event..
I have tried it like this:
this.form.FormClosing += new EventHandler(closing);
private override void closing(EventArgs e)
{
}
But I get this error message:
No overload for 'closing' matches delegate 'System.EventHandler'

This works:
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing);
private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
}

it should be like this:
private void closing(object sender, FormClosingEventArgs e)
{
}
and you have to add handler like below
frm.FormClosing += new FormClosingEventHandler();

Related

How to call LostFocus event of another control from the other control

Calling the LostFocus event of control from other control
Example. : I want to call LostFocus event of Button1 button from the Gotfocus event of Button2 button.
code is :-
private void button2_GotFocus(object sender, RoutedEventArgs e)
{
button1.gotFocus // this line giving error.
}
Use following code:
private void button2_GotFocus(object sender, RoutedEventArgs e)
{
button1.RaiseEvent(new RoutedEventArgs(LostFocusEvent, button1));
}
private void button1_LostFocus(object sender, RoutedEventArgs e)
{
}
If this doesn't solve your problem, post your code and state your problem and purpose clearly so that you can get better solution.
you can just call event handler method of Button1's LostFocus event in button2_GotFocus :
private void button2_GotFocus(object sender, RoutedEventArgs e)
{
button1_LostFocus(this.button1, null);
}
Try this
private void button2_GotFocus(object sender, RoutedEventArgs e)
{
button1_LostFocus(sender,e)
}

button.PerformClick(); not working in Form Load

I'm calling a button click in the form_load like this:
public void Form1_Load(object s, EventArgs e)
{
button.PerformClick();
}
But upon loading the button does not get clicked, what am I doing wrong?
You can write whatever you want to do inside of click in another function and call that from inside the click handler or programmatically like this -
public void Form1_Load(object s, EventArgs e)
{
//button.PerformClick();
PerformClickAction();
}
void button_click(object sender,EventArgs e)
{
PerformClickAction();
}
void PerformClickAction()
{
// Write what you need to do on click
}
This works for me:
public void Form1_Load(object s, EventArgs e){
button.PerformClick();
}
Looks like you didn't register the Form1_Load as event handler for the Load event of your form. Try this:
public Form1(){
InitializeComponent();
Load += Form1_Load;//Register the event handler so that it will work for you.
}
To get the button clicked on form load, you need to fire an event after the form is loaded, try this
public Form1()
{
InitializeComponent();
//Event fired
this.Load += new System.EventHandler(this.button1_Click);
}
//Event Handler
private void button1_Click(object sender, EventArgs e)
{
//do something
}

C# Form UserControl OnClick events

I've created a custom user control for a windows form that will operate similar to a button (and please don't suggest that I just use a button, because I will be storing data in this user control), but I can't figure out how to get the OnClick() event to fire. I've sifted through a handful of tutorials and looked at a few similar questions on the site, but I can't seem to get the event to fire off - so I'm either doing something wrong or everyone posted incorrect code (I hope it isn't the latter)
In my custom control.cs,
namespace MobCreator {
public partial class MOBSample : UserControl {
public MOBSample() {
InitializeComponent();
}
protected override void OnMouseUp(MouseEventArgs e) {
this.BorderStyle = BorderStyle.FixedSingle;
base.OnMouseUp(e);
}
protected override void OnMouseDown(MouseEventArgs e) {
this.BorderStyle = BorderStyle.Fixed3D;
base.OnMouseDown(e);
}
public event EventHandler ButtonClick;
private void OnButtonClick(object sender, EventArgs e) {
// invoke UserControl event here
if (this.ButtonClick != null) this.OnButtonClick(sender, e);
}
}
}
And in my form.cs,
private void MobCreatorForm_Load(object sender, EventArgs e) {
UserControl1.ButtonClick += new EventHandler(this.CustomEvent_Handler);
}
private void CustomEvent_Handler(object sender, EventArgs e) {
Console.WriteLine("Click");
}
However, when I run the program my console never outputs "Click".
Check this link on MSDN: it is a simple Event tutorial, you should be able to adapt it to your scenario.
At a first look, what you are probably missing is a Delegate for your event.
Try this
private void MobCreatorForm_Load(object sender, EventArgs e)
{
CustomEvent_Handler(null,null);
}
private void CustomEvent_Handler(object sender, EventArgs e)
{
Console.WriteLine("Click");
}

c# trigger/call events from another control

In VFP9, if i have two buttons (butt1 & butt2) If i want to trigger butt2 click event from butt1 i just do this from butt1 click event butt2.click() and it will call whatever code i have in the procedure/event in butt2. How do i do that in c#?
How do I call event of a certain control from another control like
below
.
private void button2_Click(object sender, EventArgs e)
{
button1.click()
}
You can call the handler directly like this button1_Click(button1, null);
Example Usage:
Button button1;
Button button2;
public Form1()
{
button1.Click += new EventHandler(button1_Click);
button2.Click += new EventHandler(button2_Click);
}
void button2_Click(object sender, EventArgs e)
{
button1_Click(button1, null);
}
public void button1_Click(object sender, EventArgs e)
{
//Action when click occurs
}
Why are you trying to simulate button click, if you just want to execute some logic?
Wrap this logic into separate method, an call it from click handlers you choose:
private Foo1() {}
private Foo2() {}
private button1_Click(object sender, EventArgs e)
{
Foo1();
Foo2();
}
private button2_Click(object sender, EventArgs e)
{
Foo2();
}
just bind the button1 click event to button2 click event in form_load or designer.csbutton2.Click+=new EventHandler(button1_Click);

C# .net framework2.0 how to dynamically assign methods to an event

VS2008, C#, .NET FRAMEWORK2.0
I want this: click button1, webbrowser1._DocumentCompleted() event revokes doA(); click button2, it revokes doB(); click button3, it revokes doC().
I know how to do it using JAVA and I guess C# has this mechanism too. Could anyone give me some idea or better, show me some example?
myButton.Click += myButton_Click;
protected void myButton_Click(object sender, EventArgs e) {}
To Add a handler
button.Click += buttonClickEventHandler;
To remove a handler
button.Click -= buttonClickEventHandler;
To add to these answers, you can also add an anonymous method to an event:
myButton.Click += (object sender, EventArgs e) => {
MessageBox.Show("MASSIVE ERROR!");
};
What this means is that you can effectively call a method even if it does not match the appropriate event handler signature:
myButton.Click += (object sender, EventArgs e) => {
DoA();
};
Or (without using a lamba expression):
myButton.Click += delegate(object sender, EventArgs e) {
DoA();
};
If you want to add event handlers to a control, which is what I think you are describing, you can easily do this. One common approach is to assign control event handlers in the code behind during page load:
protected void Page_Load(object sender, EventArgs e)
{
//add the event handler for the click event. You could provide other
//logic to determine dynamically if the handler should be added, etc.
btnButton1.Click += new EventHandler(btnButton1_Click);
btnButton2.Click += new EventHandler(btnButton2_Click);
btnButton3.Click += new EventHandler(btnButton3_Click);
}
protected void btnButton1_Click(object sender, EventArgs e)
{
//get the button, if you need to...
Button btnButton1 = (Button)sender;
//do some stuff...
DoA();
}
protected void btnButton2_Click(object sender, EventArgs e)
{
//do some stuff...
DoB();
}
protected void btnButton3_Click(object sender, EventArgs e)
{
//do some stuff...
DoC();
}
private void DoA() {}
private void DoB() {}
private void DoC() {}
Declaring an event
public class MyClass1
{
...
public event EventHandler<EventArgs> NotifyValidate;
protected void RaiseNotifyValidate(EventArgs e)
{
if (NotifyValidate != null)
{
NotifyValidate(this, e);
}
}
...
}
Firing that event in your code
...
RaiseNotifyValidate(new EventArgs()); //EventArgs could be more sophisticated, containing data etc..
Registering for that event in your code:
...
MyClass aObj = new MyClass();
aObj.NotifyValidate += new EventHandler(onNotifyValidate);
...
private void onNotifyValidate(object sender, EventArgs e)
{
//do what you need to
}
As Dan pointed out, with Lambda expressions you can define events like
aObj.NotifyValidate += (s,ev) =>
{
//handle your event
};

Categories

Resources