|
what would you use it for?
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
Like for any other object reference: a null value simply states that the reference 'points' to no object.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
yes, im not doubting the use of it for other object types. but why would anyone need to assign null to EventArgs instance?
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
Probably noone. Neverthless, the wise developer receiving a EventArgs reference (in the event handler), should consider the possibility of a null value.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
well EventArgs does not have any useful information so you wouldn't need to check if its null or not as you would never use the reference.
Unless of course you pass it another EventArgs derived object but then you will need a cast so you would validate it first then.
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
Sometimes, for example (admittedly a bad one) if you want to call a button click handler, you can use myButton_Click(this, null) , rather than myButton.PerformClick(). Although, as you have said, why would you want to?
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
yep, that possible. But if you were testing with null then your button click handler would surely never make use of EventArgs and you would never need to check it.
anyway if you want the functionality called manually then you should have it as a separate function that the button click handler also calls.
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
Agreed, but since EventArgs is essentially empty, nothing that I can think of actually makes any use of it.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
musefan wrote: well EventArgs does not have any useful information so you wouldn't need to check if its null or not as you would never use the reference
One useful information, maybe, for instance, if EventArgs reference is null or not.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
do you mean you could use it to represent a boolean value for something else such as 'isUserClick'?
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
Yes, it may represent a boolean value, ugly, I should admit.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
yes very ugly, but i guess that is an answer to my question of what it could be used for so good answer.
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
i'm doing vsts2008 unit testing. How m i assign date to following test method?
public void btnAddEntry_ClickTest()
{
frmMileage_Accessor target = new frmMileage_Accessor(); // TODO: Initialize to an appropriate value
object sender = null; // TODO: Initialize to an appropriate value
EventArgs e = null; // TODO: Initialize to an appropriate value
target.btnAddEntry_Click(sender, e);
//Assert.Inconclusive("A method that does not return a value cannot be verified.");
}
|
|
|
|
|
as a parameter, no?
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
yes.wan to know how to assign a value to test method.
|
|
|
|
|
perhaps try creating your own eventargs class that inherits from EventArgs then you can put any properties you want to use in it and pass that to the button click handler
Life goes very fast. Tomorrow, today is already yesterday.
|
|
|
|
|
|
shennwooi wrote: Can i assign some string or integer to EventArgs?
NO.
If there is a good reason for doing this, create your own class which derives from EventArgs . Use implicit operator. Eg:
class MyEventArgs : EventArgs
{
string name;
public string Name { get { return name; } }
public MyEventArgs(string name)
{
this.name = name;
}
public static implicit operator MyEventArgs(string str)
{
return new MyEventArgs(str);
}
}
class Program
{
static void Main(string[] args)
{
MyEventArgs ar = "hello";
Console.WriteLine(ar.Name);
}
}
|
|
|
|
|
use this
btnTest_Click(this, null);
to test button click.
*12Code
|
|
|
|
|
what if i wan to test the following function?
private void btnAddEntry_Click(object sender, EventArgs e)
{
double gas, miles;
int i;
string d;
char c;
bool validDate;
// Validate date format (actual values not checked)
// strip out any spaces
d = "";
for (i = 0; i < txtDate.Text.Length; i++)
{
if (txtDate.Text.Substring(i, 1) != " ")
{
d += txtDate.Text.Substring(i, 1);
}
}
txtDate.Text = d;
validDate = true;
// make sure date has eight characters (two are slashes remainder are numbers)
if (txtDate.Text.Length != 8)
{
validDate = false;
}
else
{
for (i = 0; i < 8; i++)
{
c = Convert.ToChar(txtDate.Text.Substring(i, 1));
if (i == 2 || i == 5)
{
if (c != '/')
{
validDate = false;
}
}
else
{
if (c < '0' || c > '9')
{
validDate = false;
}
}
}
}
if (!validDate)
{
MessageBox.Show("Date must be in form mm/dd/yy", "Date Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtDate.Focus();
return;
}
// Make sure miles is greater than previous value
miles = Convert.ToDouble(txtMiles.Text);
if (numValues > 0)
{
if (miles <= odometer[numValues - 1])
{
MessageBox.Show("Odometer reading less than previous value.", "Odometer Reading Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
txtMiles.Focus();
return;
}
}
// No zero gallons allowed
gas = Convert.ToDouble(txtGallons.Text);
if (gas <= 0)
{
MessageBox.Show("Gallons pumped must be greater than zero", "Gallons Pumped Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
txtGallons.Focus();
return;
}
dates[numValues] = txtDate.Text;
odometer[numValues] = miles;
gallons[numValues] = gas;
numValues++;
NewEntryLine();
txtDate.Text = GetToday();
txtMiles.Text = "";
txtGallons.Text = "";
txtDate.Focus();
}
|
|
|
|
|
Hi,
split your code into two methods:
1. one contains the "bunsiness logic" and no GUI stuff (No MessageBox); it does not take sender or eventargs as parameters, and it does return a calculated value and outputs (through out parameter) a string which should be shown to the user.
2. the buttonClickHandler which mainly calls the other method and shows the MessageBox when there is a need to.
private void btnAddEntry_Click(object sender, EventArgs e) {
string s;
double result=calculate(out s);
if (s==null) textBox.Text="The result is "+result;
else MessageBox.Show(s);
}
private double calculate(out string message) {
message=null;
double result=...;
if (...) message="Something went wrong";
...
return result;
}
That way you can easily perform unit tests on the business logic, and there probably won't be a need to test the actual buttonClickHandler anymore.
|
|
|
|
|
You've had some good answers. To add to them, you can't use your derived event args for existing events unless you create your own controls derived from the original.
For example, maybe you want to assign the integer value 1 to the event args passed when a form is loaded. You need to create your own EventArgs and your own Form with a new Load event and override the OnLoad method. Something like this.
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : IntForm
{
public Form1()
{
InitializeComponent();
this.Load += new System.EventHandler<inteventargs>(Form1_Load);
}
private void Form1_Load(object sender, IntEventArgs e)
{
Console.WriteLine(e.Value);
}
}
public class IntEventArgs : EventArgs
{
private int _Value;
public IntEventArgs(int value)
{
_Value = value;
}
public IntEventArgs() : this(0) { }
public static implicit operator IntEventArgs(int value)
{
return new IntEventArgs(value);
}
public int Value
{
get { return _Value; }
}
}
public class IntForm : Form
{
public new event EventHandler<IntEventArgs> Load;
protected override void OnLoad(EventArgs e)
{
EventHandler<IntEventArgs> eh = Load;
if (eh != null)
eh(this, 1);
}
}
}
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn) Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia) Why are you using VB6? Do you hate yourself? (Christian Graus)
|
|
|
|
|
I'm pretty new in c# and i have a problem. I have an interrupt and i want to show some data on the form. to do that i need to delegate to obtain the form. I want to have the whole form because i have to put lots of information on the form. I've tried this:
<br />
public optionbox getOptionbox()<br />
{<br />
if (box.InvokeRequired)<br />
{<br />
optionboxThreadCallBack d = new optionboxThreadCallBack(getOptionbox);<br />
return d();<br />
} else<br />
return box; <br />
}<br />
but i get an stack overflow. The solution needs to work and doesn't needs to be the best. Anyone a suggestion?
|
|
|
|
|
Of course you do, it keeps recursing. What do you want to achieve ? How does your callback class help ?
Christian Graus
Driven to the arms of OSX by Vista.
"I am new to programming world. I have been learning c# for about past four weeks. I am quite acquainted with the fundamentals of c#. Now I have to work on a project which converts given flat files to XML using the XML serialization method" - SK64 ( but the forums have stuff like this posted every day )
|
|
|
|
|
On an interrupt it must show information on the form(called box) when i do this it gets a cross thread exception. I have seen the article about cross thread handling but because i need to put a lot of information on the form i was trying to get the whole form.
|
|
|
|