Eigene Eventhandler ....


Christian Kusmanow

Erfahrenes Mitglied
Ach ich verstehe. Du musst jetzt nur noch eine Instanz deiner Comments Klasse
in deiner Dev Klasse definieren. Danach machst die Comments instanz via Property verfügbar.
Musst aber einen anderen Namen als Comments verwenden.
Danach kannst auf das Event zugreifen.
Also dann so.
C#:
myDev.Comments.New_Comment += myNameSpace.Dev.ChangeCommentEventArgsDeleagte( dev_Comments_New_Comment );
Btw. Man benennt Klassen immer mit einem großen Buchstaben beginnend. ;)
 

ZeuX

Grünschnabel
Ich danke dir!
Es scheint alles so zu funktionieren wie es soll :)

Komischerweise habe ich nur Klassen in Klassen mit Großbuchstaben benannt, werde es ändern, danke :)

ZeuX

ps: es soll ein Programm werden dass Inhalte auf einer Seite besser aufbereitet und zb Meldung gibt wenn ein neuer Kommentar geschrieben wurde. Also ein aufgebohrter Screen Scraper.
 

Christian Kusmanow

Erfahrenes Mitglied
Mann Schreibt aber auch öffentliche Propertynamen groß.
Du machst den Anschein als würdest noch keinen offiziellen Coding Style kennen.
In dem Folgendem Thread findest Infos zu:
[thread=227773]Probleme mit Daten die in entsprechende Klassen unter zubringen ! - Thread[/thread]
Ich hab mal dein Beispiel dementsprechend umbenannt und ein bissel verfeinert. :)
C#:
namespace myNameSpace
{
	using System;
	using System.Collections.Specialized;


	public class Dev
	{
		public class CommentsChangedEventArgs : EventArgs
		{
			readonly bool newComment;
			readonly string comment;

			public bool NewComment {
				get { return this.newComment; }
			}

			public string Comment {
				get { return comment; }
			}


			public CommentsChangedEventArgs( bool newComment, string comment ) {
				this.newComment = newComment;
				this.comment = comment;
			}
		}

		public delegate void CommentAddedEventHandler( object sender, CommentsChangedEventArgs e );

		public class CommentsCollection : StringCollection {
			public event CommentAddedEventHandler CommentAdded;

			bool has_new;

			public CommentsCollection() : base() {
				has_new = false;
			}


			public new void Add( string comment ) {
				base.Add( comment );
				has_new = true;
				if ( CommentAdded != null )
					CommentAdded( this, new CommentsChangedEventArgs( has_new, comment ) );
			}
		}


		CommentsCollection comments;

		public CommentsCollection Comments {
			get { return comments; }
		}

		public Dev() {
			comments = new CommentsCollection();
		}
	}
}
C#:
dev.Comments.CommentAdded += myNameSpace.Dev.CommentAddedEventHandler( dev_Comments_CommentAdded );
 
Zuletzt bearbeitet:

ZeuX

Grünschnabel
Du machst den Anschein als würdest noch keinen offiziellen Coding Style kennen.
Wie gesagt, ich habe noch nichts größeres mit C# programmiert.

In dem Folgendem Thread findest Infos zu:
[thread=22777]Probleme mit Daten die in entsprechende Klassen unter zubringen ! - Thread[/thread]
Der Link den du angegeben hast führt zu einem Thread den du sicher nicht gemeint hast ;)
Hab ihn aber inzwischen schon selber gefunden und werde ihn mir auch sobald ich wieder Zeit habe durchlesen.

Und danke für die Verfeinerung, an einer Klasse die von StringCollections erbt habe ich nicht gedacht...
 
Zuletzt bearbeitet von einem Moderator:

Christian Kusmanow

Erfahrenes Mitglied
ZeuX hat gesagt.:
cosmo hat gesagt.:
Du machst den Anschein als würdest noch keinen offiziellen Coding Style kennen.
Wie gesagt, ich habe noch nichts größeres mit C# programmiert.
Das tut nichts zur Sache. CodingStyles gelten sprachübergreifend. ;)
ZeuX hat gesagt.:
Der Link den du angegeben hast führt zu einem Thread den du sicher nicht gemeint hast ;)
Hab ihn aber inzwischen schon selber gefunden und werde ihn mir auch sobald ich wieder Zeit habe durchlesen.
Jo da hast recht. Hab wohl mit der Threadnummer was falsch gemacht. :-(
Fang aber rechtzeitig an Dir einen offiziellen CodingStyle anzugewöhnen
und Du wirst es zukünftig leichter haben...
 

Shakie

Erfahrenes Mitglied
Warum von EventArgs erben?

Christian Kusmanow hat gesagt.:
Aber als aller erstes, solltest Du dir eine eine Klasse implementieren,
die von EventArgs erbt und den "textToAdd" bereit hält.
Code:
public class ChangeTextEventArgs : EventArgs {
        
    string readonly _TextToAdd;

    public string TextToAdd {
        get { return _TextToAdd; }
    }

    public ChangeTextEventArgs( string textToAdd ) {
        _TextToAdd = TextToAdd;
    }
}
public delegate void ChangeTextEventHandler(object sender, ChangeTextEventArgs e);
Warum sollte die Klasse von EventArgs erben? Was bringt das? Damit alle Events von allen Controls einheitlich strukturiert sind? Wäre nett wenn mich da bitte jemand aufklärt. ;)
 

Christian Kusmanow

Erfahrenes Mitglied
Shakie hat gesagt.:
Warum sollte die Klasse von EventArgs erben? Was bringt das? Damit alle Events von allen Controls einheitlich strukturiert sind?
Ganau so schaut es aus. Und Du könntest dadurch zB auch verschiedene Ereignissobjekte
von einer Methode behandeln lassen. Was auch immer die Verwendung der OOP notwendig bzw möglich macht.
Kannst ja mit dem is Operator herrausfinden von welchem Typ das Objekt ist, welches von EventArgs erbt.
Weiterhin hast dadurch auch die Möglichkeit, ein leeres Ereignissobjekt verwenden zu können (EventArgs.Empty),
welches Du dir sonst selber hättest implementieren müssen.