【问题标题】:C#.NET - How to inherit from an existing windows forms controlC#.NET - 如何从现有的 Windows 窗体控件继承
【发布时间】:2009-09-29 11:14:08
【问题描述】:

我习惯于在 Visual C++ 中工作。在学习 C#.NET 时,我倾向于尝试找到与 VC++ 中的工作方式等效的方法。

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

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

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

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

【问题讨论】:

    标签: c# .net forms inheritance


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以使用自己的代码覆盖所需的功能,或者只是创建一个派生自 System.Windows.Forms.Button 的新用户控件。

      这取决于您是否需要创建一个将被多次使用的新控件,或者这是否只是您需要针对特定​​情况执行的操作。

      编辑:查看 MSDN 文档:

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

      【讨论】:

        【解决方案3】:
        abstract class MyClass :  Windows.Form
        {
        ....
        }
        
        
        public class WindowsFormClass : MyClass
        {
        ....
        }
        

        类似地,您可以创建任何自定义类并从控件类(按钮、文本框、网格等)派生它,覆盖其方法以添加您的功能,然后从中创建自定义对象。它将在工具箱中提供给您,您可以开始在您的项目中使用它。

        【讨论】:

        【解决方案4】:

        如果您从 System.Windows.Forms.Button 派生,例如,您的新控件将在工具箱中可用。一个新选项卡应出现在顶部,并将命名为 [项目名称] 组件。您只需将其拖放到表单上即可。

        就更改表单上已有控件的类型而言,我已经成功地更改了设计器生成的代码 .cs 文件中的类型。

        这是一篇关于 creating custom .net controls: 的精彩文章

        本文讨论了所有可能的场景,包括使用继承,并提供了大量示例代码。

        编辑:

        将此添加到您的项目中:

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

        然后构建项目。 DerivedTextBox 然后应该在 ToolBox 中可用。

        【讨论】:

        • 这实际上并没有发生在我身上。即使我从控件派生,工具箱中也没有出现任何内容。您提供的文章似乎只涵盖了自定义控件的创建,即一种新型控件。这不是我想要的,而是从现有控件继承以将事件等路由到我的代码中。
        • 重新阅读文章并寻找“格式掩码控件”。这向您展示了如何使用继承。他们正在扩展一个常规的 .net TextBox 以添加额外的功能。
        • 另外,在您的派生类在工具箱中可用之前,您必须构建您的项目。
        • 无论如何它都不会出现在工具箱中。在“格式化掩码控件”部分,出现以下文本:“添加对名为:FormatMask.dll 的编辑掩码用户控件 DLL 的引用”.. - 您忘记提及了吗?
        • 一旦您的派生类被构建到 dll 中,它将永久添加到工具箱中。这样,所有其他 winforms 项目都将能够使用您的新控件。我解释的方式仅适用于您当前的解决方案。
        猜你喜欢
        • 2013-02-13
        • 2016-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-24
        • 2016-01-11
        相关资源
        最近更新 更多