I have a recursive function and two events (Going_in and Coming_out).
I use the Going_in event to increment a progressbar every time the function calls itself and I use Coming_out to decrement the progressbar every time the function returns from recursion.
Now i have to combine Going_in and Coming_out into one event.
How can I do that?
Thanks in advance!
Here is part of the code.
Form1.cs
.....
void ProgressBar_increment(object sender, EventArgs e)
{
progressBar1.Value++;
}
void ProgressBar_decrement(object sender, EventArgs e)
{
progressBar1.Value--;
}
public void button2_Click(object sender, EventArgs e)
{
initialize();
label3.Visible = false;
int wait_time = telltime();
int number = reading();
Facto mth;
mth = new Facto(label3, wait_time, progressBar1);
mth.Going_in += new EventHandler(ProgressBar_increment);
mth.Coming_out += new EventHandler(ProgressBar_decrement);
int result = mth.Factorial(number);
string display = result.ToString();
label3.Visible = true;
label3.Text = display;
}
Facto.cs
public event EventHandler Going_in;
public event EventHandler Coming_out;
........
public int Factorial(int number_to_calculate)
{
int Result;
if (Going_in != null)
{
Going_in(this, new EventArgs());
}
System.Threading.Thread.Sleep(wait_time);
if (number_to_calculate == 0)
{
if (Coming_out != null)
{
Coming_out(this, new EventArgs());
}
return 1;
}
else
{
Result = (number_to_calculate * Factorial(number_to_calculate - 1));
if (label_for_output != null)
{
label_for_output.Visible = true;
label_for_output.Text = Result.ToString();
label_for_output.Update();
}
else
Console.WriteLine(Result);
}
if (Coming_out != null)
{
Coming_out(this, new EventArgs());
}
System.Threading.Thread.Sleep(wait_time);
return Result;
}
That is what the
EventArgsare for.Put some variable in the
EventArgsobject (or create your own for this purpose) from where you can determine whether to increment or decrement (enummaybe?)I.e. (possible pseudo code alert)
And in your event do something like: