Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 181
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Liste mit Ereignis bei Änderung der Elementanzahl


Autor: Günther Foidl
Sprache: C#
Bewertung: 3,4
(1 Bewertung)
Anzahl der Aufrufe: 5577
  
Kick it on dotnet-kicks.de  

Beschreibung:

Diese Implementierung einer Liste feuert ein Ereignis wenn sich die Anzahl der Listenelemente ändert.

Verwendung zB wenn in einer Anwendung Daten verwendet werden welche in einer (generischen) Liste gespeichert sind. Wird an "einem Ende" der Anwendung ein Element zur Liste hinzugefügt und soll am "anderen Ende" der Anwendung zB in einem Label die Anzahl der Elemente ausgegeben werden kann dies über das Ereignis erreicht werden.

Beispiel:

using System;
using gfoidl.Tools;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
gfList list = new gfList();
list.AnzahlGeändert +=
new EventHandler.AnzahlEventArgs>(list_AnzahlGeändert);

list.Add(1);
list.AddRange(new int[] { 2, 3, 4, 5 });
list.Remove(3);
list.Clear();

Console.ReadKey();
}

private static void list_AnzahlGeändert(object sender, gfList.AnzahlEventArgs e)
{
Console.WriteLine(e.Anzahl);
}
}
}


Die Klasse kann auch noch erweitert werden für alle Fälle der Manipulation der Listen-Elemente.


Abgelegt unter: Liste, generische Liste, Ereignis, Anzahl, Notification.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Collections.Generic;

namespace gfoidl.Tools
{
	/// <summary>
	/// Stellt eine erweiterte List<(Of <(T>)>) dar die eine Ereignis bei
	/// Änderung der Anzahl der Listenelemente feuert.
	/// </summary>
	/// <typeparam name="T"></typeparam>
	public class gfList<T> : List<T>
	{
		#region Ereignisse
		/// <summary>
		/// Benachrichtigt über eine Änderung der Anzahl der Listenelemente
		/// </summary>
		public event EventHandler<AnzahlEventArgs> AnzahlGeändert;
		#endregion
		//---------------------------------------------------------------------
		/// <summary>
		/// Fügt am Ende der <c>gfList</c> ein Objekt des Typs T hinzu.
		/// </summary>
		/// <param name="item">
		/// Das Objekt, das am Ende der gfList hinzugefügt werden soll.
		/// Der Wert kann für Referenztype <c>null</c> sein.
		/// </param>
		public new void Add(T item)
		{
			base.Add(item);

			// In lokale Variable kopieren um threadsicher zu sein (laut MSDN):
			EventHandler<AnzahlEventArgs> tmp = AnzahlGeändert;
			if (tmp != null)
				tmp(this, new gfList<T>.AnzahlEventArgs(this.Count));
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Fügt die Elemente der angegebenen Auflistung am Ende der gfList
		/// hinzu.
		/// </summary>
		/// <param name="collection">
		/// Die Auflistung, deren Elemente am Ende von gfList hinzugefügt 
		/// werden sollen. Die Auflistung an sich kann nicht null sein, sie 
		/// kann jedoch Elemente enthalten, die null sind, wenn Typ T einen 
		/// Referenztyp darstellt.
		/// </param>
		public new void AddRange(IEnumerable<T> collection)
		{
			base.AddRange(collection);

			// In lokale Variable kopieren um threadsicher zu sein (laut MSDN):
			EventHandler<AnzahlEventArgs> tmp = AnzahlGeändert;
			if (tmp != null)
				tmp(this, new gfList<T>.AnzahlEventArgs(this.Count));
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Entfernt alle Elemente aus der gfList.
		/// </summary>
		public new void Clear()
		{
			base.Clear();

			// In lokale Variable kopieren um threadsicher zu sein (laut MSDN):
			EventHandler<AnzahlEventArgs> tmp = AnzahlGeändert;
			if (tmp != null)
				tmp(this, new gfList<T>.AnzahlEventArgs(this.Count));
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Entfernt das erste Vorkommen eines angegebenen Objekts aus gfList.
		/// </summary>
		/// <param name="item">
		/// Das aus dem gfList zu entfernende Objekt. Der Wert kann für 
		/// Referenztypen null sein.
		/// </param>
		public new void Remove(T item)
		{
			base.Remove(item);

			// In lokale Variable kopieren um threadsicher zu sein (laut MSDN):
			EventHandler<AnzahlEventArgs> tmp = AnzahlGeändert;
			if (tmp != null)
				tmp(this, new gfList<T>.AnzahlEventArgs(this.Count));
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Argumente des Ereignisses
		/// </summary>
		public class AnzahlEventArgs : EventArgs
		{
			/// <summary>
			/// Anzahl der Listenelemente
			/// </summary>
			public int Anzahl { get; set; }
			//-----------------------------------------------------------------
			public AnzahlEventArgs(int anzahl)
			{
				this.Anzahl = anzahl;
			}
		}
	}
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Rainer Hilmer schrieb am:  06.12.2008 20:15:05

Hallo Günther,
was sind die Vorteile deines Snippets gegenüber einer ObservableCollection?
http://msdn.microsoft.com/en-us/library/ms668604.aspx
Gruß
Rainer
Günther Foidl schrieb am:  06.12.2008 20:39:07

Hallo Rainer,
bisher wusste ich nichts von der ObservableCollection - liegt wohl daran dass diese Klasse eher zu WPF gehört als zu Winforms ;)

Somit ist die ObserableCollection im Vorteil. Mein Snippet kann aber immer noch zu "Lernzwecken" verwendet werden.

Danke für den Hinweis.

mfG Günther


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.