C# error: “An object reference is required for the non-static field, method, or property”
-
Im trying to figure out Delegates as I have read this is the best way to pass Values from one form to another. I have tried to do this but am getting an error. So to test I am trying to do the following. Form1 has a button which opens Form2 which contains a DatePicker. The user selects a date and clicks OK. I then want the date passed back to a textbox on Form1. This is my code. FORM1 - CODE (The getEffDate in this code is where im getting the error.)
private void TestingButton_Click(object sender, EventArgs e)
{
Form_EffectiveDate effDate = new Form_EffectiveDate();
if (effDate.ShowDialog() == DialogResult.OK)
{
EffDateTextBox.Text = Form_EffectiveDate.getEffDate;
}
}FORM 2 - Code
namespace Manager_Changes
{
public partial class Form_EffectiveDate : Form
{
public delegate void GetEffDate(object sender);
public GetEffDate getEffDate;public Form\_EffectiveDate() { InitializeComponent(); } private void DateOKButton\_Click(object sender, EventArgs e) { getEffDate(effDateTimePicker.Value.ToString()); DialogResult = System.Windows.Forms.DialogResult.OK; this.Close(); } }
}
Chris Wright
Delegates aren't "the best way" to pass variables back, Events are (which use delegates, but hides the complexities from you). Have a look here: Transferring information between two forms, Part 2: Child to Parent[^]
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
-
Delegates aren't "the best way" to pass variables back, Events are (which use delegates, but hides the complexities from you). Have a look here: Transferring information between two forms, Part 2: Child to Parent[^]
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
Perfect! I will get researching again. I appreciate the information, thanks @DalekDave. As I am new to C# its hard to tell if someone is right when they say "the best way" as that might just be personal preference. Thanks again, have a great day.
Chris Wright
-
Im trying to figure out Delegates as I have read this is the best way to pass Values from one form to another. I have tried to do this but am getting an error. So to test I am trying to do the following. Form1 has a button which opens Form2 which contains a DatePicker. The user selects a date and clicks OK. I then want the date passed back to a textbox on Form1. This is my code. FORM1 - CODE (The getEffDate in this code is where im getting the error.)
private void TestingButton_Click(object sender, EventArgs e)
{
Form_EffectiveDate effDate = new Form_EffectiveDate();
if (effDate.ShowDialog() == DialogResult.OK)
{
EffDateTextBox.Text = Form_EffectiveDate.getEffDate;
}
}FORM 2 - Code
namespace Manager_Changes
{
public partial class Form_EffectiveDate : Form
{
public delegate void GetEffDate(object sender);
public GetEffDate getEffDate;public Form\_EffectiveDate() { InitializeComponent(); } private void DateOKButton\_Click(object sender, EventArgs e) { getEffDate(effDateTimePicker.Value.ToString()); DialogResult = System.Windows.Forms.DialogResult.OK; this.Close(); } }
}
Chris Wright
I usually do it this way:
private void TestingButton_Click(object sender, EventArgs e)
{
using (Form_EffectiveDate form = new Form_EffectiveDate())
{
if (form.ShowDialog(this) == DialogResult.OK)
{
EffDateTextBox.Text = form.EffectiveDate;
}
}
}In
Form_EffectiveDate
, set theOKButton
property of the form toDateOKButton
(this negates the need to write an event-handler for the button). Then:public partial class Form_EffectiveDate : Form
{
public DateTime EffectiveDate
{
get { return effDateTimePicker.Value; }
}public Form\_EffectiveDate() { InitializeComponent(); }
}
enum HumanBool { Yes, No, Maybe, Perhaps, Probably, ProbablyNot, MostLikely, MostUnlikely, HellYes, HellNo, Wtf }
-
Perfect! I will get researching again. I appreciate the information, thanks @DalekDave. As I am new to C# its hard to tell if someone is right when they say "the best way" as that might just be personal preference. Thanks again, have a great day.
Chris Wright
I'm not DalekDave - I'm OriginalGriff. DalekDave is someone I'm winding up a little by automatically sending him an email every time I post something! :laugh:
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
-
I'm not DalekDave - I'm OriginalGriff. DalekDave is someone I'm winding up a little by automatically sending him an email every time I post something! :laugh:
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
Apologies, this is my first time using Code Project. Its not structured like a normal forum haha
Chris Wright
-
I usually do it this way:
private void TestingButton_Click(object sender, EventArgs e)
{
using (Form_EffectiveDate form = new Form_EffectiveDate())
{
if (form.ShowDialog(this) == DialogResult.OK)
{
EffDateTextBox.Text = form.EffectiveDate;
}
}
}In
Form_EffectiveDate
, set theOKButton
property of the form toDateOKButton
(this negates the need to write an event-handler for the button). Then:public partial class Form_EffectiveDate : Form
{
public DateTime EffectiveDate
{
get { return effDateTimePicker.Value; }
}public Form\_EffectiveDate() { InitializeComponent(); }
}
enum HumanBool { Yes, No, Maybe, Perhaps, Probably, ProbablyNot, MostLikely, MostUnlikely, HellYes, HellNo, Wtf }
Thank you, I could give this a go too, it all helps with my learning. Can I ask what you mean by "In Form_EffectiveDate, set the OKButton property of the form to DateOKButton (this negates the need to write an event-handler for the button )"? I clicked the form and looked through the properties but couldn't see anything relating to OKButton.
Chris Wright
-
Thank you, I could give this a go too, it all helps with my learning. Can I ask what you mean by "In Form_EffectiveDate, set the OKButton property of the form to DateOKButton (this negates the need to write an event-handler for the button )"? I clicked the form and looked through the properties but couldn't see anything relating to OKButton.
Chris Wright
In the designer view of the form (not the code-file), click on the top of the form. In the properties windows, the form itself will now be selected. Amongst all properties of the form, you have one which is called
AcceptButton
(my mistake, I gave you a wrong name); set this one to the name of the OK button (you can select it). When that is done, you no longer need to write an event-handler (a method) for the button's click event; the framework will wire up everything and on click of the button the form will be hidden and returnDialogResult.OK
.enum HumanBool { Yes, No, Maybe, Perhaps, Probably, ProbablyNot, MostLikely, MostUnlikely, HellYes, HellNo, Wtf }
-
Apologies, this is my first time using Code Project. Its not structured like a normal forum haha
Chris Wright
No problem!
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
-
In the designer view of the form (not the code-file), click on the top of the form. In the properties windows, the form itself will now be selected. Amongst all properties of the form, you have one which is called
AcceptButton
(my mistake, I gave you a wrong name); set this one to the name of the OK button (you can select it). When that is done, you no longer need to write an event-handler (a method) for the button's click event; the framework will wire up everything and on click of the button the form will be hidden and returnDialogResult.OK
.enum HumanBool { Yes, No, Maybe, Perhaps, Probably, ProbablyNot, MostLikely, MostUnlikely, HellYes, HellNo, Wtf }
Wow, this is nice to know. Thank you so much, I am loving learning C# :)
Chris Wright
-
Wow, this is nice to know. Thank you so much, I am loving learning C# :)
Chris Wright
Phil.o did make a small mistake: highlight your button, and set the "DialogResult" property to "OK" for it to close the form and return DialogResult.OK. The Form.AcceptButton property just tells the form that an ENTER keypress is the equivelant of clicking the button. (Form.CancelButton does the same thing, but with the ESC key.)
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
-
Phil.o did make a small mistake: highlight your button, and set the "DialogResult" property to "OK" for it to close the form and return DialogResult.OK. The Form.AcceptButton property just tells the form that an ENTER keypress is the equivelant of clicking the button. (Form.CancelButton does the same thing, but with the ESC key.)
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
Thanks OriginalGriff. Learning is much easier and fun when people like you guys, help people like me out. I was ripping my hair out yesterday trying to figure out how to a value from one form to another. Is the code that Phil.o supplied classed as an event? You mentioned above that - Delegates aren't "the best way" to pass variables back, Events are (which use delegates, but hides the complexities from you).
Chris Wright
-
Phil.o did make a small mistake: highlight your button, and set the "DialogResult" property to "OK" for it to close the form and return DialogResult.OK. The Form.AcceptButton property just tells the form that an ENTER keypress is the equivelant of clicking the button. (Form.CancelButton does the same thing, but with the ESC key.)
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
-
Thanks OriginalGriff. Learning is much easier and fun when people like you guys, help people like me out. I was ripping my hair out yesterday trying to figure out how to a value from one form to another. Is the code that Phil.o supplied classed as an event? You mentioned above that - Delegates aren't "the best way" to pass variables back, Events are (which use delegates, but hides the complexities from you).
Chris Wright
No - that's just using ShowDialog to display Form2, which causes the Form1 code to "freeze", waiting for the new form to close before executing any more code (this is technically called a "Modal Form" but you don't need to worry about it). There is also Form.Show which returns immediately, and that type needs Events to "Know" when data is available for Form1 to process. Follow the link I gave you, and you'll find a download of a source project that shows it all working with Show. If you are going to use Events - and it's a good idea, .NET is built on the buggers - then also have a look here: A Simple Code Snippet to Add an Event[^] - it makes it a lot easier to create them in your own forms and other classes.
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
-
No problem!
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
Is it because I am being stupid or do all three of the examples go from Parent to Child? Transferring information between two forms, Part 2: Child to Parent[^] I could be wrong, maybe its the 'Form Text' that is confusing me.
Chris Wright
-
Is it because I am being stupid or do all three of the examples go from Parent to Child? Transferring information between two forms, Part 2: Child to Parent[^] I could be wrong, maybe its the 'Form Text' that is confusing me.
Chris Wright
No, the Child raises the event to say "data available", the Parent handles the event and fetches it using the Child instance and property.
Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
-
Im trying to figure out Delegates as I have read this is the best way to pass Values from one form to another. I have tried to do this but am getting an error. So to test I am trying to do the following. Form1 has a button which opens Form2 which contains a DatePicker. The user selects a date and clicks OK. I then want the date passed back to a textbox on Form1. This is my code. FORM1 - CODE (The getEffDate in this code is where im getting the error.)
private void TestingButton_Click(object sender, EventArgs e)
{
Form_EffectiveDate effDate = new Form_EffectiveDate();
if (effDate.ShowDialog() == DialogResult.OK)
{
EffDateTextBox.Text = Form_EffectiveDate.getEffDate;
}
}FORM 2 - Code
namespace Manager_Changes
{
public partial class Form_EffectiveDate : Form
{
public delegate void GetEffDate(object sender);
public GetEffDate getEffDate;public Form\_EffectiveDate() { InitializeComponent(); } private void DateOKButton\_Click(object sender, EventArgs e) { getEffDate(effDateTimePicker.Value.ToString()); DialogResult = System.Windows.Forms.DialogResult.OK; this.Close(); } }
}
Chris Wright
If you want to pass data from Form2 to Form1. Add static string or DateTime field in Form1 then in Form2 get the value of that datepicker and assign it Form1.staticvariable.