Hi,
I am doing an application where Usercontrol is referenced to a windows application. I created delegates and events for respective delegates and I also gave button keydown and keypress events in usercontrol. While execution, program.cs file is executed i.e upto
Application.Run(new Form1());
where form is dipalyed as output but after this statement, When I click on button there is no response. while debugging I came to know that the flow is not entering the keypress event method after this statement. I can't understand the problem. This is done in c# windows application in .net 2.0.
Please help me.......
Loading
Danatas GerviPosted Sep 13, 2009, 3:06 AM
The idea is –the inner textbox have been rising event of inner component and this rises event of his parent control, and parent of control gets this event with proper arguments.
:)
Danatas GerviPosted Sep 13, 2009, 3:01 AM
In project – one textbox on user control,
And one this user control on the form,
Next:
Code in User Control InitializeComponent
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
Code in User Control
namespace EventInUserControl
{
public partial class UserControl1 : UserControl
{
public event EventHandler<NumberArgs> OnNumberArgumentChange;
public UserControl1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (OnNumberArgumentChange != null)
{
OnNumberArgumentChange(sender, new NumberArgs()
{
Number = textBox1.Text
});
}
}
}
public class NumberArgs:EventArgs
{
public string Number;
}
}
Code in Form:
namespace EventInUserControl
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void userControl11_OnNumberArgumentChange(object sender, NumberArgs e)
{
this.Text = e.Number;
}
}
}
Code in form InitializeComponent()
this.userControl11.OnNumberArgumentChange += new System.EventHandler<EventInUserControl.NumberArgs>(this.userControl11_OnNumberArgumentChange);
srinathPosted Sep 10, 2009, 7:12 AM
public delegate void NumberArgumentHandle(object sender, NumberArgs args);
public object key = new object();
public event NumberArgumentHandle NumberSelected
{
add
{
Events.AddHandler(key, value);
}
remove
{
Events.RemoveHandler(key, value);
}
}
private void onNumberSelected(NumberArgs args)
{
if (Events[key] != null)
{
(Events[key] as NumberArgumentHandle)(this, args);
}
}
for keydown event
public void btn_key(object sender, KeyEventArgs e)
{
NumberArgs args = new NumberArgs(Convert.ToDouble((sender as Button).Text));
onNumberSelected(args);
}
for keypress event:
private void btn_key1(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
---------
public class NumberArgs : EventArgs
{
double number = double.MaxValue;
public NumberArgs(double number)
{
this.number = number;
}
public double Number
{
get { return number; }
}
}
In form1.designer.cs
this.userControl1.NumberSelected += new NumberPad.UserControl1.NumberArgumentHandle(this.userControl1_NumberSelected);
In form1.cs:
void userControl1_NumberSelected(object sender, NumberPad.UserControl1.NumberArgs args)
{
textBox1.Text = args.Number.ToString();
}
please help me...
Danatas GerviPosted Sep 10, 2009, 6:17 AM
:-)
srinathPosted Sep 10, 2009, 4:40 AM
I gave usercontrol delegates handlers to form1 in form1.designer.cs file. then also it is not working.
Danatas GerviPosted Sep 10, 2009, 4:12 AM
This statement ends when Form1 closes. And exit from this statement causes application to close.
I mean – if form is on the screen, the process is in Application.Run(…).
Internally, Application.Run creates the Windows messages queue, and these messages (mouse moves, paint, key presses) have been dispatched to Main from (instance of Form1) and every control can receive those messages as events. So you in code can 'register' the event handler, and add functionality …
BenPosted Sep 10, 2009, 4:02 AM