-
Delegates and Event
Hi all
I am trying to use a code sniplet from a source, but the error CS0079 was prompted, saying that StatusMessageChange should only appear on the left side of += or -+. Can someone kindly help me.
Code:
namespace IBIX
{
public class BatchInfo
{
public delegate void StatusMessageChangeHandle(object tmp, StatusMessageChangeEventArgs e);
public event BatchInfo.StatusMessageChangeHandle StatusMessageChange
{
add
{
this.StatusMessageChange = (BatchInfo.StatusMessageChangeHandle)Delegate.Combine(this.StatusMessageChange, value);
}
remove
{
this.StatusMessageChange = (BatchInfo.StatusMessageChangeHandle)Delegate.Remove(this.StatusMessageChange, value);
}
}
}
}
Much appreciated.
-
Re: Delegates and Event
sounds like (but I did not tested) you're looking for:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateCombineCSharp
{
public class BatchInfo
{
public delegate void StatusMessageChangeHandle(object tmp, StatusMessageChangeEventArgs e);
private BatchInfo.StatusMessageChangeHandle _StatusMessageChange;
public event BatchInfo.StatusMessageChangeHandle StatusMessageChange
{
add
{
this._StatusMessageChange += (BatchInfo.StatusMessageChangeHandle)Delegate.Combine(this._StatusMessageChange, value);
}
remove
{
this._StatusMessageChange -= (BatchInfo.StatusMessageChangeHandle)Delegate.Remove(this._StatusMessageChange, value);
}
}
}
}
-
Re: Delegates and Event
wait: it should be as follows:
Code:
public class BatchInfo
{
public delegate void StatusMessageChangeHandle(object tmp, StatusMessageChangeEventArgs e);
private BatchInfo.StatusMessageChangeHandle _StatusMessageChange;
public event BatchInfo.StatusMessageChangeHandle StatusMessageChange
{
add
{
this._StatusMessageChange = (BatchInfo.StatusMessageChangeHandle)Delegate.Combine(this._StatusMessageChange, value);
}
remove
{
this._StatusMessageChange = (BatchInfo.StatusMessageChangeHandle)Delegate.Remove(this._StatusMessageChange, value);
}
}
}
-
Re: Delegates and Event
Code:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private BatchInfo info;
/// <summary>
/// Constructzor
/// </summary>
public Form1()
{
InitializeComponent();
info = new BatchInfo(); // BatchInfo class is crreated here
// delegate is added here
info.StatusMessageChange += new BatchInfo.StatusMessageChangeHandle(info_StatusMessageChange);
}
/// <summary>
/// Using the event outside the class
/// </summary>
/// <param name="tmp"></param>
/// <param name="e"></param>
void info_StatusMessageChange(object tmp, EventArgs e)
{
/// Your code is here
}
}
public class BatchInfo
{
public delegate void StatusMessageChangeHandle(object tmp, EventArgs e);
private event StatusMessageChangeHandle statusChange;
public BatchInfo() {
this.StatusMessageChange += new StatusMessageChangeHandle(BatchInfo_StatusMessageChange);
}
/// <summary>
/// A delegate used within the class itself
/// </summary>
/// <param name="tmp"></param>
/// <param name="e"></param>
void BatchInfo_StatusMessageChange(object tmp, EventArgs e)
{
// Your code is here
}
/// <summary>
/// Here is the event explicitly typed
/// </summary>
public event StatusMessageChangeHandle StatusMessageChange
{
add
{
this.statusChange += value;
// you adfdress the private event or you will get Stackoverflow
// because of redirecting to the same name!!!
}
remove
{
this.statusChange -= value;
}
}
}
}
Hope this helps a bit- Shows how to use a delegate inside a class and outsid a class
-
Re: Delegates and Event
Thanks everyone. This forum has been very helpful to me. Awesome beautiful people here.
-
Re: Delegates and Event
In this scenario you could simply write:
public event BatchInfo.StatusMessageChangeHandle StatusMessageChange;
This will implicitly have the normal "add" and "remove" handlers. I'm just mentioning this in case you thought you had to write the add/remove handlers similar to how a property requires you write get/set methods.