如何仅使用系统命名空间扩展richtextbox控件

时间:2016-07-08 23:14:04

标签: c#

有没有办法使用下面的等效方法扩展c#中的richtextbox控件:

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);
        }
    }
}

类似于:

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

我知道如何使用旧方法通过创建类并继承richtextbox对象来扩展它,但是我更喜欢做的是反过来,因为上面将功能添加到基础RichTextBox对象而无需创建新的自定义usercontrol以扩展它的功能。

要清楚,我希望做以下(或类似):

public class Foo : RichTextBox { }

我不确定这种扩展方法是什么,或者它是否具有特定的名称/分类,但是当以这种方式扩展对象时,感觉更自然,而不是创建新的控件来填充数百个已经膨胀的工具栏控制。

2 个答案:

答案 0 :(得分:3)

你想要的是extension method,例如,这个方法将扩展RichTextBox:

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

答案 1 :(得分:1)

就像你的字符串扩展名一样,但使用import org.apache.activemq.camel.component.ActiveMQComponent; import org.apache.camel.CamelContext; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.DefaultCamelContext; public class CamelHelloWorldExample { public static void main(String[] args) throws Exception { CamelContext context = new DefaultCamelContext(); try { context.addComponent("activemq", ActiveMQComponent.activeMQComponent("vm://localhost?broker.persistent=false")); context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { from("activemq:queue:test.queue") .to("stream:out"); } }); ProducerTemplate template = context.createProducerTemplate(); context.start(); template.sendBody("activemq:test.queue", "Hello World"); Thread.sleep(2000); } finally { context.stop(); } } } 作为第一个参数:

RichTextBox

此外,您不需要具有与控件相同的命名空间,您可以使用您自己/您的项目的命名空间而不会出现问题。