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
}
/// <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;
}
}
Kommentare zum Snippet