Feedback

C# - CursorChanger

Veröffentlicht von am 02.11.2006
(3 Bewertungen)
Bietet durch Implementation von IDisposable eine kompakte Möglichkeit, den Cursor für eine bestimmte Zeit zu ändern.
Der ursprünglich angezeigte Cursor wird automatisch wiederhergestellt.


Beispiel:
public class WaitCursorChanger : CursorChanger
{
public WaitCursorChanger(Control control) : base(Cursors.WaitCursor,control)
{ }
}

[...]
private void foo()
{
// Cursor: Default
using (new WaitCursorChanger(this))
{
// Cursor: WaitCursor
using (new CursorChanger(Cursors.Help,this))
{
// Cursor: Help
}
// Cursor: WaitCursor
}
// Cursor: Default
}
GFU-Schulungen  [Anzeige]

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

C# Aufbaukurs

Sie haben grundlegende .NET- und C#-Kenntnisse und und wollen diese nun erweitern. Der Aufbaukurs C# führt Sie ein die Arbeit mit Interfaces und Delegates, Generics und Parallel Computing.

/// <summary>
/// Bietet durch Implementation von IDisposable eine kompakte Möglichkeit, den Cursor für eine bestimmte Zeit zu ändern.
/// Der ursprünglich angezeigte Cursor wird automatisch wiederhergestellt
/// </summary>
public class CursorChanger : IDisposable
{
	private Cursor rawCursor;	// der ursprüngliche Cursor, der später wiederhergestellt wird
	private Control control;	// das Control für das der Cursor geändert werden soll 


	/// <summary>
	/// Bietet durch Implementation von IDisposable eine kompakte Möglichkeit, den Cursor für eine bestimmte Zeit zu ändern.
	/// Der ursprünglich angezeigte Cursor wird automatisch wiederhergestellt.
	/// </summary>
	/// <param name="cursor">Der Cursor, der gesetzt werden soll.</param>
	/// <param name="control">Ein Control zum setzen des Cursors. <remarks>Ist dieses Control in (einem) anderen Control(s) enthalten, wird der Cursor des Root-Controls geändert</remarks></param>
	/// <example>
	/// public class WaitCursorChanger : CursorChanger
	/// {
	///	public WaitCursorChanger(Control control) : base(Cursors.WaitCursor,control)
	///	{ }
	/// }
	/// 
	/// [...]
	/// private void foo()
	/// {
	///     // Cursor: Default
	///	using (new WaitCursorChanger(this))
	///	{
	///		// Cursor: WaitCursor
	///		using (new CursorChanger(Cursors.Help,this))
	///		{
	///			// Cursor: Help
	///		}
	///		// Cursor: WaitCursor
	///	}
	///	// Cursor: Default
	/// }
	/// </example>
	public CursorChanger(Cursor cursor,Control control)
	{
		this.control = control;

		// den gewünschten Cursor setzen
		Control rootControl = getRootControl(control);
		this.rawCursor = rootControl.Cursor;
		rootControl.Cursor = cursor;
	}


	/// <summary>
	/// Ermittelt das Root-Control
	/// </summary>
	/// <param name="control">Control, dessen Root-Control ermittelt werden soll</param>
	/// <returns>das Root-Control des übergebenen Controls</returns>
	private Control getRootControl(Control control)
	{
		return (control.Parent==null) ? control : getRootControl(control.Parent);
	}


	/// <summary>
	/// Freigeben des Objektes
	/// </summary>
	void IDisposable.Dispose()
	{
		// den ursprünglichen Cursor wiederherstellen
		getRootControl(control).Cursor = rawCursor;
	}
}
Abgelegt unter Cursor, WaitCursor, Cursors, Control.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!