Feedback

C# - Universelles Copy / Paste für das aktuelle Steuerelement

Veröffentlicht von am 18.02.2015
(0 Bewertungen)
Sinn

Vereinfachung der Implementierung eigener Copy/Paste Funktionen über das Menü. Bei der Verwendung der Copy / Paste Shortcuts im Menü werden diese nicht mehr an ein Steuerelement weitergereicht.

Implemetierung

Für das Finden des gerade aktiven Steuerelements wird die Windows-eigene Funktion 'GetFocus' verwendet. Diese ist nur der Bequemlichkeit halber in 'GetFocusedControl' gekapselt.

Die Funktionen 'Copy' und 'Paste' ermitteln via Reflection die jeweilige parameterlose Variante des übergebenen Steuerelements. Wird eine entsprechende Funktion gefunden, wird sie anschließend aufgerufen.

Hinweise

Nicht jedes Steuerelement hat eine Copy oder Paste Funktion.

Für die parameterlose Variante wird ein leeres Array für die Parameter-Typen ' new Type [] { } ' mitgegeben. Ohne diese Angabe kann es zu einem Laufzeitfehler wegen Uneindeutigkeit kommen.
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

[DllImport ("User32", SetLastError = true)]
public static extern IntPtr GetFocus ();

static public Control GetFocusedControl () {
	IntPtr handle;

	handle = GetFocus ();
	if (handle != IntPtr.Zero)
		return Control.FromHandle (handle);
	return null;
}

static public dynamic Copy (this Control Ctrl) {
	MethodInfo mi;

	mi = Ctrl.GetType ().GetMethod ("Copy", new Type [] { });
	if (mi != null)
		return mi.Invoke (Ctrl, null);
	return null;
}

static public void Paste (this Control Ctrl) {
	MethodInfo mi;

	mi = Ctrl.GetType ().GetMethod ("Paste", new Type [] { });
	if (mi != null)
		mi.Invoke (Ctrl, null);
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!