在设计视图中显示以编程方式添加到 WinForms 应用程序中的控件吗?

2024-03-02

使用 Visual Studio(任何版本都可以),是否可以在切换回设计视图时显示以编程方式(而不是通过设计视图)添加的控件?

我尝试过一些非常简单的事情,例如:

public Form1()
{
    AddCtrl();
    InitializeComponent();
    AddCtrl();
}

private void AddCtrl()
{
    this.SuspendLayout();
    this.Controls.Add(new TextBox());
    this.ResumeLayout(false);
    this.PerformLayout();
}

……但并没有什么卵用。


设计师会运行我的代码吗?

当表单在设计器中显示时,设计器会反序列化表单的代码(Form1.Designer.cs 或 Form1.cs 中的第一类)并创建表单基类的实例并反序列化InitializeComponent并创建您在类中声明的控件并设置它们的属性。

所以代码中Constructor不会运行。设计器仅创建表单基类的实例,而不查看表单的构造函数。

设计师如何工作的有趣例子

看下面的代码,注意这个问题:

  • 在哪;s?
  • 构造函数Form111111 for Form1?
  • What is NotDefinedFunction()?
  • How can int i = "xxxxxxxxxx"?

即使您创建了这样的文件,设计器也会正确显示。

using System
using System.Collections.Generic
using System.Drawing
using System.Windows.Forms
namespace Sample
{
    public class Form1:Form
    {
        public Form111111()
        {
            NotDefinedFunction()
            InitializeComponent()
        }
        public void InitializeComponent()
        {
            int i = "xxxxxxxxxx"
            this.textBox1 = new System.Windows.Forms.TextBox()
            this.SuspendLayout()
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(0, 0)
            this.textBox1.Name = "textBox1"
            this.textBox1.Text = "text of text box 1";
            // 
            // Form1
            // 
            this.Controls.Add(this.textBox1)
            this.Name = "Form1"
            this.Text = "Form1"
            this.Size= new Size(250,100)
            this.ResumeLayout(false)
            this.PerformLayout()
        }
        private TextBox textBox1
    }
}

您将在设计器中看到该表单:

如何在设计时动态添加控件?

如果您需要这样的功能,您可以在表单的基类构造函数中创建动态控件,因为当您在设计器中打开子窗体时,基类的构造函数将运行,然后它将在设计时运行。

但您应该知道这些控件是继承的,不能使用子窗体的设计器进行更改。

所以只需创建一个Form2:

public Form2()
{
    InitializeComponent();
    AddDynamicControls();
}

private void AddDynamicControls()
{
    this.Controls.Add(
       new TextBox() { 
          Name = "TextBox1", Text = "Dynamic", Location = new Point(100, 0) });
}

构建项目,然后更改基类Form1继承自Form2:

public class Form1:Form2

结果将是:

还有其他解决办法吗?

如果你想在设计时真正生成一些控件,我认为你应该看看.

您可以使用 t4 模板在设计时生成代码。也许你见过实体框架.tt模板文件。您可以添加新的Text Templateitem 到您的项目中,并将设计时生成项目的逻辑放入您的 t4 模板中。

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

在设计视图中显示以编程方式添加到 WinForms 应用程序中的控件吗? 的相关文章

  • 在 Visual Studio 2012 Express 上通过 Nuget 的 NUnit.Runners 不起作用

    我正在尝试使用 NuGet 管理器在 Visual Studio 2012 Express 中设置简单的 NUnit 项目 从 PROJECT gt Manage NuGet Packages 我安装了 NUnit 框架 并想要添加 NUn
  • 如何自定义 ASP.Net Core 模型绑定错误?

    我只想从我的 Web API Asp net Core 2 1 返回标准化的错误响应 但我似乎不知道如何处理模型绑定错误 该项目刚刚从 ASP NET Core Web 应用程序 gt API 模板创建 我有一个简单的操作定义为 Route
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • 是否返回 std::move (x)?

    Are std vector
  • .NET:SqlDataReader.Close 或 .Dispose 导致超时过期异常

    当尝试在 SqlDataReader 上调用 Close 或 Dispose 时 我收到超时过期异常 如果您有到 SQL Server 的 DbConnection 您可以使用以下命令自行重现它 String CRLF r n String
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • Ajax 函数在重定向后不保存滚动位置

    正如标题所述 我编写了一个 ajax 函数 该函数应该滚动到用户在重定向之前所在的位置 我写了一个alert对于测试场景 它确实触发了 但滚动不断回到顶部 我在这里做错了什么 JavaScript ajax type GET url Adm
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 当 C 中没有足够的内存用于静态分配时会发生什么?

    当您动态分配内存时 例如malloc 1024 sizeof char 结果指针设置为NULL如果没有足够的可用内存来满足请求 当没有足够的内存来满足静态分配时会发生什么 例如char c 1024 char c 1024 不一定是静态分配
  • 为什么 C++20 范围不只提供管道语法?

    我知道这个问题听起来很奇怪 所以这里有一些背景信息 最近 我很失望地了解到 C 20 范围内的映射缩减并不像人们所期望的那样工作 即 const double val data transform accumulate 不起作用 你必须这样
  • 如何使用 std::string 创建条件断点

    假设我有这个功能 std string Func1 std string myString do some string processing std string newString Func2 myString return newSt
  • 如何从 Function App 设置会话 ID 或创建自定义字段到 Application Insights

    功能应用程序如下 public static async Task
  • 更改成员资格、角色等的默认连接字符串

    默认情况下 我的网络应用程序似乎正在使用LocalSqlServer作为用于任何应用程序服务 例如成员资格 角色 身份验证 等 的连接字符串 有什么方法可以更改默认连接字符串应该是什么 默认值是 LocalSqlServer 似乎很随意 我
  • 将华氏温度转换为摄氏度的 C 程序始终打印零

    我需要一些关于用 C 语言将华氏温度转换为摄氏度的程序的帮助 我的代码如下所示 include
  • std::iota 的 iota 代表什么?

    我假设 i 是增量 a 是分配 但我无法弄清楚或找到答案 而且 它看起来与非标准非常相似itoa我认为这很令人困惑 C iota is not an acronym or an initialism It is the word iota
  • 如何正确地将十六进制转义添加到字符串文字中?

    当你有C语言的字符串时 你可以在里面直接添加十六进制代码 char str abcde a b c d e 0x00 char str2 abc x12 x34 a b c 0x12 0x34 0x00 这两个示例在内存中都有 6 个字节
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐

  • 判断设备是否有触摸屏

    我的应用程序可以在标准手机上运行 但它也可以在 Android 播放器上运行 我通过 HDMI 将其连接到电视并使用鼠标进行导航 有没有办法以编程方式确定设备是否支持触摸屏 以便我可以区分两种导航方式 I tried this http d
  • 从项目 azure devops REST API 获取所有工作项

    我正在使用 Azure Devops API 通过 AWS Lambda node js 创建通知机器人 此时 我需要检查每个任务工作项是否附加到父用户故事 第一步是获取 给定 项目上的所有任务工作项 对于这一步 我正在阅读 azure d
  • 最坏情况时间复杂度分析伪代码

    有人可以帮我分析这个伪代码的时间复杂度吗 我正在寻找最坏情况的复杂度 但我无法弄清楚它是 O n 4 O n 5 还是完全其他的东西 如果您能详细说明您是如何解决这个问题的 我们将不胜感激 sum 0 for i 1 to n do for
  • 在构造函数中创建一个指针,指向 C++ 中类的实例

    我对这些 C 指针有点困惑 我想知道是否可以在构造函数内创建一个指向类实例的指针 以下行中的内容 class Room public Room Room private Room ptrToSelf Room Room ptrToSelf
  • zeppelin hive 解释器抛出 ClassNotFoundException

    我已经部署了zeppelin 0 6并在Jdbc解释器下配置了hive 尝试执行 hive show databases Throws org apache hive jdbc HiveDriver 类 java lang ClassNot
  • 如何访问封装在类中的未命名“枚举类”?

    class A public enum class HELLO WORLD 众所周知 在一个class 声明一个简单的enum 而不是enum class 是一个更好的主意 因为它已经用class鉴别 但上面的说法仍然是有效的C 0x签名
  • 将字符串写入文本文件

    我正在将日志保存到 SD 卡上的 txt 文件中 但是一旦保存了两行 它就会覆盖它并重新开始 这是我的代码 public static String getTimestamp try SimpleDateFormat dateFormat
  • 从Python中的一行中提取特定的子字符串

    我有一个包含多行格式的文件 格式如下 DIV ID 0X78800009 EXT LOS ANGELES TY STANDARD OWN 0X74400002 ABBR LA 我需要提取 EXT 值 但只提取引号中的部分 我目前正在使用这个
  • 在 Spark 上执行多个 SQL 查询

    我在文件 test sql 中有一个 Spark SQL 查询 CREATE GLOBAL TEMPORARY VIEW VIEW 1 AS select a b from abc CREATE GLOBAL TEMPORARY VIEW
  • Android 蓝牙 connect() 抛出错误

    我有一个项目要求 其中我们有一个包含两个组件的产品 一个 Android 平板电脑和一个 PCB 包含 RN42 蓝牙芯片 这两个组件位于塑料外壳内 因此总是彼此靠近 这两个组件设备最初会配对一次 因此配对信息将永远存在于平板电脑中 Pro
  • 无法在Python3中导入sqlite3

    我无法在 Python 版本 3 5 0 中导入 sqlite3 模块 这是我得到的 gt gt gt import sqlite3 Traceback most recent call last File
  • Mysql 5有管理分层数据的程序吗?

    我使用嵌套集模型来保存分层数据 http mikehillyer com articles managing hierarchical data in mysql 进入数据库表 我感兴趣的是 MySQL 是否内置支持添加 删除节点 或者我必
  • 使用 javascript 按值查找复选框

    我使用这个 JavaScript 来查找我需要的复选框并选中它们
  • 使用 JDK 1.6 时,我的 Web 应用程序中是否需要 stax-api-1.0.x?

    我目前正在开发一个使用 Jersey 进行 REST 的 Web 应用程序 我使用maven stax api 1 0 1和1 0 2都被拉入我的web inf lib中 我以为stax api是JDK1 6的一部分 为什么这些 JAR 包
  • 在 Mac 上的 bash 中从 xml 中提取值

    我需要从此 xml 中提取名称值 产品查找器 文件 config xml
  • ckeditor jquery 插件和模糊事件

    我目前正在使用 ckeditor 并且我正在使用该编辑器的 jquery 插件 以便在文档准备好时实例化所有内容 我需要做的是为正在创建的 ckeditor 实例设置一个模糊事件 下面的代码是我用来实例化 ckeditor 的代码 text
  • 在 Android TextView 中显示 unicode 字符

    互联网上有很多关于这个主题的帖子 但是没有一个能够隔离并解决问题 我试图使用 TextView 显示存储在 SQLite 数据库中的一些特殊 UTF 8 编码符号 但它显示的只是方框 我明白这意味着没有安装正确的字体 但是当我在 Mac 上
  • 当函数或方法调用中省略括号时,这意味着什么?

    我有这个示例代码 class objectTest def init self a self value a def get value self return self value a objectTest 1 b objectTest
  • Laravel Eloquent AS 关键字

    我正在尝试使用关键字 AS 来组合两列 以便我可以对该列进行排序 这是目前的完整查询 quotes Quote where created at gt date gt where created at lt date Y m d 23 59
  • 在设计视图中显示以编程方式添加到 WinForms 应用程序中的控件吗?

    使用 Visual Studio 任何版本都可以 是否可以在切换回设计视图时显示以编程方式 而不是通过设计视图 添加的控件 我尝试过一些非常简单的事情 例如 public Form1 AddCtrl InitializeComponent