Visual Studio 设计器中的抽象 UserControl 继承

2024-03-09

abstract class CustomControl : UserControl 
{
    protected abstract int DoStuff();
}

class DetailControl : CustomControl
{
    protected override int DoStuff()
    { 
        // do stuff
        return result;
    }
}

我在表单中放置了 DetailControl。它在运行时正确呈现,但设计器显示错误并且不会打开,因为基本用户控件是抽象的。

目前,我正在考虑以下补丁,这对我来说似乎是非常错误的,因为我希望子类被迫实现该方法。

class CustomControl : UserControl 
{
    protected virtual int DoStuff()
    {
        throw new InvalidOperationException("This method must be overriden.");
    }
}

class DetailControl : CustomControl
{
    protected override int DoStuff()
    { 
        // do stuff
        return result;
    }
}

有人对如何解决这个问题有更好的想法吗?


我们想要什么

首先,让我们定义最终类和抽象基类。

public class MyControl : AbstractControl
...
public abstract class AbstractControl : UserControl // Also works for Form
...

现在我们需要的是描述提供者.

public class AbstractControlDescriptionProvider<TAbstract, TBase> : TypeDescriptionProvider
{
    public AbstractControlDescriptionProvider()
        : base(TypeDescriptor.GetProvider(typeof(TAbstract)))
    {
    }

    public override Type GetReflectionType(Type objectType, object instance)
    {
        if (objectType == typeof(TAbstract))
            return typeof(TBase);

        return base.GetReflectionType(objectType, instance);
    }

    public override object CreateInstance(IServiceProvider provider, Type objectType, Type[] argTypes, object[] args)
    {
        if (objectType == typeof(TAbstract))
            objectType = typeof(TBase);

        return base.CreateInstance(provider, objectType, argTypes, args);
    }
}

最后我们只需应用一个TypeDescriptionProvider抽象控件的属性。

[TypeDescriptionProvider(typeof(AbstractControlDescriptionProvider<AbstractControl, UserControl>))]
public abstract class AbstractControl : UserControl
...

就是这样。无需中间控制。

在同一个解决方案中,提供程序类可以应用到我们想要的任意多个抽象基。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 设计器中的抽象 UserControl 继承 的相关文章

随机推荐

  • 如何在 Webstorm 中提供 Python 语法着色?

    我有一个 Python 项目 我使用 WebStorm 作为我的编辑器 问题是 Python 的语法没有着色 如何以良好的语法显示 Python 页面 我搜索的不超过 我不会用 Python 开发页面 但我确实希望它们能够在 Webstor
  • 如何为 void 返回方法定义 AnswersWithDelay

    因此 我想在 Mockito 中模仿一种正在进行网络调用并等待其完成然后返回的方法 我在这里找到了这个很好的答案 https stackoverflow com a 50530261 4433222 https stackoverflow
  • Tensorflow:即使关闭会话也会发生内存泄漏?

    当我意识到 即使我在 for 循环中关闭当前会话 我的程序也会大幅减慢 并且由于正在构建的操作而导致内存泄漏 我只是在尝试四元神经网络的一些东西 这是我的代码 for step in xrange 0 200 num epochs trai
  • 联合体可以在声明中初始化吗?

    例如 假设我们有一个工会 typedef union unsigned long U32 float f U U32 F 当声明这个联合类型的变量时 有没有办法设置一个初始值 U U32 F u 0xffffffff Does not wo
  • JSON 中的有序字典

    有3个字符串变量 public var userLoginId String public var searchString String public var tableName String 我有一本字典 let dict userLo
  • C# - RichTextBox 更改某些单词的颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何从 RichTextBox 中选择文本然后为其着色 https stackoverflow com questions 3707120 how to select text from the ri
  • Django url 模板标签:“模块”对象没有属性“视图”

    有问题的标签 lt a href url django contrib auth views login gt Login lt a gt URLConf from django contrib auth import views br b
  • 使用 JavaCV 相当于 Java 中的 OpenCV 语句

    我想知道如何使用 JavaCV 在 OpenCV 中构造以下 C 语句 float p float cvGetSeqElem circles i int radius cvRound p 2 使用 cvHoughCircles 获取检测到的
  • Unity3D 的良好全局异常处理策略是什么?

    我正在考虑做一些 Unity3D 脚本编写的东西 并且我想建立全局异常处理系统 这不适用于在游戏的发布版本中运行 其目的是捕获用户脚本和编辑器脚本中的异常 并确保将它们转发到数据库进行分析 并向相关开发人员发送电子邮件 以便他们可以修复他们
  • 即使应用程序未运行,也可保持 FirebaseMessagingService 活动并显示带有数据负载的通知的服务

    我正在使用 FCM 通知的应用程序中工作 当应用程序运行 前台或后台 时 通知会收到 但是当我从最近的应用程序中清除该应用程序时 我不会收到任何我正在使用 FirebaseMessagingService 的通知 所以我想创建一个服务 即使
  • 对SVG viewBox、宽度、高度等感到困惑

    如果我对 SVG 的理解是正确的 那么以下两个 SVG 描述将产生相同的图像 但事实并非如此 注意 这两个代码列表仅在其坐标值方面有所不同svg标签 更具体地说 对于每个 x y第一个列表中的 对有一个 x 205 y 55 在第二个列表中
  • 如何将字节字符串拆分为单独的部分

    我一直在尝试创建波形图像 并且从 wav文件使用song wave open and song readframes 1 返回 b x00 x00 x00 x00 x00 x00 我怎样才能把它分成三个独立的部分 例如b x00 x00 b
  • C 中的图形函数

    为什么我运行代码时什么也看不到 我用的是DOSBox include
  • 如何获取当前应用程序区域设置?

    我需要获取当前区域设置 不是用户区域设置 而是我的应用程序区域设置 假设我的应用程序有两种本地化 在项目设置中 英语 默认 和法语 如果用户在 iPhone 上设置法语 那么我的应用程序将显示法语界面 如果用户在 iPhone 上设置德语
  • @Injectable(providedIn: 'root') 的语义?

    只是想确保我理解的语义 Injectable providedIn root 在 Angular 6 之前 如果我们从 NPM 导入包含服务的模块 我们会在应用程序模块中声明该模块 以便整个应用程序都可以访问该服务 像这样的事情 impor
  • 建立新的 Java 开发中心

    我正在建立一个 Java 开发商店 目前只是我自己作为唯一的开发人员 但希望随着业务的增长需要雇用其他人 显然 我希望将其设置正确 以便随着更多人的加入 他们可以立即提高工作效率 请帮助建议我想做的事情以及完成这些事情的工具 这是我认为我需
  • Django 模型继承 - 在查询中只需要父类的实例

    假设我有 2 个模型 一个是另一个的父模型 如何查询 Django 中所有不是餐厅的地点 Place objects all 将包括所有餐厅 对吗 我想将孩子排除在结果之外 谢谢你 class Place models Model name
  • 将多个不相邻列复制到数组

    我正在尝试将多个不相邻 不连续 的 Excel 列复制到数组中 但它不起作用 以下是我尝试过的 Public Function Test Dim sh As Worksheet Set sh Application Sheets MyWor
  • Response.End 之后关闭窗口

    例如我有一个表格ListView即处于编辑模式 发生了一些事情 导致列表视图正在使用的表不再可用 我只想在用户点击 保存 时能够关闭窗口 In Page Load 我检查桌子是否可用 如果没有 我打电话RegisterClientScrip
  • Visual Studio 设计器中的抽象 UserControl 继承

    abstract class CustomControl UserControl protected abstract int DoStuff class DetailControl CustomControl protected over