C#: String as parameter to event?
Like this
public class NewListEntryEventArgs : EventArgs{ private readonly string test; public NewListEntryEventArgs(string test) { this.test = test; } public string Test { get { return this.test; } }}
then you declare your class like this
class MyClass{ public delegate void NewListEntryEventHandler( object sender, NewListEntryEventArgs args); public event NewListEntryEventHandler NewListEntry; protected virtual void OnNewListEntry(string test) { if (NewListEntry != null) { NewListEntry(this, new NewListEntryEventArgs(test)); } }}
and in the subscribing Form
private void btn_myClass_Click(object sender, EventArgs e){ MyClass myClass = new MyClass(); myClass.NewListEntry += NewListEntryEventHandler; ...}private void NewListEntryEventHandler( object sender, NewListEntryEventArgs e){ if (richTextBox1.InvokeRequired) { this.Invoke((MethodInvoker)delegate { this.NewListEntryEventHandler(sender, e); }); return; } richTextBox1.Text += e.Test;}
I've taken the liberty of making the NewListEntryEventArgs
class immutable, since that makes sense. I've also partially corrected your naming conventions, simplified and corrected where expedient.
You need to create a new class by inheriting off EventArgs.
Create your own version of the EventArgs
.
Do it like this:
public class MyEventArgs : EventArgs{ public string MyEventString {get; set; } public MyEventArgs(string myString) { this.MyEventString = myString; }}
Then in your code replace the EventArgs
with MyEventArgs
and create an MyEventArgs
object with your string in it.
Then you can access it by using the MyEventArgs
instance .MyEventString
.
So you would do something like this:
///// myClass (working thread...)class myClass{ public event EventHandler NewListEntry; public void ThreadMethod() { DoSomething(); } protected virtual void OnNewListEntry(MyEventArgs e) { EventHandler newListEntry = NewListEntry; if (newListEntry != null) { newListEntry(this, e); } } private void DoSomething() { ///// Do some things and generate strings, such as "test"... string test = "test"; OnNewListEntry(new MyEventArgs(test)); }}
And in your form:
private void myObj_NewListEntry(Object objSender, MyEventArgs e){ this.BeginInvoke((MethodInvoker)delegate { // Here I want to add my string from the worker-thread to the textbox! richTextBox1.Text += e.MyEventString; });}