有没有办法使用下面的等效方法扩展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 { }
我不确定这种扩展方法是什么,或者它是否具有特定的名称/分类,但是当以这种方式扩展对象时,感觉更自然,而不是创建新的控件来填充数百个已经膨胀的工具栏控制。
答案 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
此外,您不需要具有与控件相同的命名空间,您可以使用您自己/您的项目的命名空间而不会出现问题。