2009-09-29 68 views
0

我习惯于在Visual C++中工作。在学习C#.NET时,我倾向于尝试找到在VC++中完成事情的等效方法。C#.NET - 如何从现有的Windows窗体控件继承

当我在C++中有一个按钮时,为了完全控制它,我创建了一个派生自CButton的类(相当于.NET中的System.Windows.Forms.Button),然后将此类设置为我的类型按钮,以获取所有事件和覆盖路由到我的代码。

在C#中,我还没有真正找到相同的方法来做到这一点。似乎没有办法设置应该从哪个类创建控件,而且我甚至都没有试图替换创建该对象的自动生成的代码,因为它可能会在下一分钟被丢弃。

使用我自己的类来控制用户控件的正确方法是什么?

编辑:我应该说明我有兴趣将我的自定义类添加到现有项目。到目前为止,大多数响应或者提供了将其添加到现有项目的非工作方式,或者使用组件(DLL)创建外部库的方式,但对于我的特定情况来说这有点矫枉过正。

回答

2

它没有任何窍门。创建一个新的 。cs源文件或使用Visual Studio的类,请记住在文件顶部包含正确的using System.Windows.Forms语句,然后像平常一样继承(注意:在.NET中,没有命名约定CWhatever的类)。

0

例如,如果您从System.Windows.Forms.Button派生,您的新控件将在工具箱中可用。一个新标签应该出现在顶部,并且将被命名为[Project Name]组件。您可以将它拖放到表单上。

至于改变已经在窗体上的控件的类型,我已经成功改变了设计器生成的代码.cs文件中的类型。

这里有creating custom .net controls:

一大篇文章论述埃维可能的方案,包括使用继承,并提供了大量的示例代码。

编辑:

添加到您的项目:

public class DerivedTextBox: System.Windows.Forms.TextBox 
{ 
} 

然后生成项目。 DerivedTextBox应该在工具箱中可用。

+0

它实际上并没有发生在我身上。尽管我是从一个控件派生出来的,但是工具箱中没有任何东西出现。您提供的文章似乎只包含了自定义控件的创建,即新类型的控件。这不是我想要的,而是从现有的控件继承,以便将事件等路由到我的代码中。 – sharkin 2009-09-29 11:45:57

+0

重新阅读文章并寻找“Format Mask Control”。这向您展示了如何使用继承。他们正在扩展一个常规的.net文本框来添加额外的功能。 – Joepro 2009-09-29 11:48:59

+0

另外,在您的派生类在工具箱中可用之前,您必须构建您的项目。 – Joepro 2009-09-29 11:49:44

0

您可以用自己的代码重写所需的函数,也可以简单地创建一个从System.Windows.Forms.Button派生的新用户控件。

这取决于您是否需要创建一个新的控件,该控件将被多次使用,或者如果这是您仅需要为特定情况执行的操作。

编辑:有一个在MSDN文档:

http://msdn.microsoft.com/en-us/library/5h0k2e6x(VS.71).aspx

0
abstract class MyClass : Windows.Form 
{ 
.... 
} 


public class WindowsFormClass : MyClass 
{ 
.... 
} 

与之相似,你可以创建任何自定义类和控制类派生它(按钮,文本框,电网等),重写它的方法来添加你的功能,然后创建一个自定义对象。它将在工具箱中供您使用,您可以在项目中开始使用它。

+0

“创建一个自定义对象”的步骤是什么? – sharkin 2009-09-29 11:43:37

+0

看到这个 - > http://ondotnet.com/pub/a/dotnet/2002/03/18/customcontrols.html。您也可以参考其他人发布的网站。 – Bhaskar 2009-09-29 12:57:35