2016-07-08 3 views
0

Gibt es eine Möglichkeit, die richtextbox Kontrolle in C# unter Verwendung einer äquivalenten Methode wie unten zu erweitern:Wie kann ich die richtextbox Steuerung mit System-Namensraum erweitern nur

namespace System 
{ 
    public static class StringExtensions 
    { 
     public static string PadBoth(this string str, int length) 
     { 
      int spaces = length - str.Length; 
      int padLeft = spaces/2 + str.Length; 
      return str.PadLeft(padLeft).PadRight(length); 
     } 
    } 
} 

So etwas wie:

namespace System.Windows.Controls 
{ 
    public static class RichTextBoxExtensions 
    { 
     public static string MyCustomMethod() 
     { 
      return "It works!"; 
     } 
    } 
} 

Ich weiß, wie man es auf die alte Art und Weise erweitert, indem man eine Klasse erstellt und das richtextbox-Objekt erbt, was ich jedoch lieber in umgekehrter Richtung tun würde, da das obige RichTextBox-Objekt die Funktionalität hinzufügt, ohne dass ein neues benutzerdefiniertes Steuerelement erstellt werden muss um seine Funktionalität zu erweitern.

Um es klar, ich bin nicht sucht die folgenden (oder ähnlichen) zu tun:

public class Foo : RichTextBox { } 

Ich bin nicht sicher, was diese Methode der Erweiterung aufgerufen wird oder wenn es hat sogar einen bestimmten Namen/Klassifizierung, aber es fühlt sich einfach natürlicher an, wenn Objekte auf diese Weise erweitert werden, als neue Steuerelemente zu erstellen, die eine bereits aufgeblähte Symbolleiste mit Hunderten von Steuerelementen füllen.

+0

Was Sie gezeigt haben, ist eine "Erweiterungsmethode" (https://msdn.microsoft.com/en-us/library/bb383977.aspx). Die Antwort hängt davon ab, was genau Sie erreichen möchten. – itsme86

Antwort

3

Was Sie wollen, ist ein extension method, zum Beispiel genannt, diese Methode wird die RichTextBox erweitern:

public static class RichTextBoxExtensions 
{ 
    public static void MyCustomMethod(this RichTextBox self) 
    { 
     MessageBox.Show("It works, this textbox has " + self.Text + " as the text!"); 
    } 
} 
+0

Danke. Sie würden nicht zufällig wissen, welchen Namespace ich verwenden soll, oder geht das auch unter "System". –

+1

@SanuelJackson: Wie ich in meiner Antwort erwähnte: Es gibt keinen spezifischen Namensraum. Verwenden Sie Ihr Projekt, wenn Sie nichts anderes möchten. –

+2

Was @VisualVincent gesagt hat, ist richtig, der Namensraum spielt keine Rolle. Sie können Erweiterungsmethoden aus jedem Namespace verwenden, daher neige ich dazu, einen neuen Namespace für sie zu erstellen und sie in meinen Code zu übernehmen, wenn ich sie brauche. –

1

Genau wie Ihre String-Erweiterung tun, aber ein RichTextBox als erstes Argument verwenden:

public static string MyCustomMethod(this RichTextBox richTextBox) 
{ 
    return richTextBox.Text; 
} 

Auch müssen Sie nicht den gleichen Namespace wie das Steuerelement haben, können Sie Ihren eigenen/den Namespace Ihres Projekts ohne ein Problem verwenden.

+0

Netter Job. Danke. –

Verwandte Themen