WinForms 应用程序中的初始化代码 - Program.cs 还是 MainForm?

2024-04-30

我有一个 Windows 窗体应用程序,当前在启动时加载数据库。流程是这样的:

Program.cs => Application.Run(new MainForm()); => MainForm 构造函数 => 打开数据库

因此基本上 MainForm 保存了使应用程序运行的所有部分,而 Program.cs 只是一个存根。目前,加载的数据库的名称是硬编码的,我想添加功能来指定通过命令行加载的数据库的名称。同时,我想添加稍后进行一些单元测试甚至依赖注入的能力,所以我想知道推荐哪种方法?

  • 更改 MainForm 的构造函数以接受一些参数。然后更改Program.cs以读取命令行并将调用更改为Application.Run(new MainForm());因此
  • 保持 Program.cs 和构造函数的签名不变,并检查 MainForm 构造函数中的命令行

方法一似乎更干净,因为它允许测试运行者使用测试数据库创建 MainForm,但由于我通常不是 WinForms 开发人员,我不知道如果没有默认构造函数是否会产生副作用主窗体或者是否有更好的方法?


我认为这可以归结为关注点分离。 Program 类应该关注应用程序级别的详细信息,而 MainForm 应该关注表单详细信息。然后这告诉我该程序应该解析命令行并将名称传递给表单。

您仍然可以在表单上保留默认构造函数,并将其标记为私有,或者在执行它时抛出错误。或者您仍然可以让 Program.cs 使用默认构造函数来创建表单,并简单地使用参数注入数据库名称(因此它是构造函数注入或参数注入),例如



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

WinForms 应用程序中的初始化代码 - Program.cs 还是 MainForm? 的相关文章

  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • .NET UI 元素线程限制的原因

    我们知道 除了实例化元素的线程之外 不可能从任何线程执行操作任何 UI 元素属性的代码 我的问题是 为什么 我记得当我们使用 COM 用户界面元素时 在 COM Visual Basic 6 0 时代 所有 UI 元素都是使用 COM 类和
  • 如何打开 Windows 资源管理器窗口并选择特定文件夹

    我有一个 winform 应用程序 这个 winform 应用程序创建了几个文件 我想在我的应用程序中实现 查找目标 功能来显示这些文件 这些文件位于同一文件夹中 看图片 假设我创建了几个文件 C Test 文件夹 该文件夹包含以下文件 C
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • ExitCodeGenerator 和 System.exit(0) 之间的区别

    我最近了解到关闭 Spring Boot 应用程序的正确方法是 public class Application Bean public ExitCodeGenerator exitCodeGenerator return new Exit
  • 什么时候适合使用Lua这样的嵌入式脚本语言

    我玩 魔兽世界 大约有两年了 我对用来编写插件的 Lua 很好奇 由于到目前为止我读到的有关 Lua 的内容都是 快 轻 和 这太棒了 所以我想知道如何以及何时使用它 您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么 当您需要最
  • 将控制器工厂添加到 ASP MVC

    我对工作中的一个大型项目有一个设计想法 我想我已经弄清楚了 但我真的很想得到一些关于a 总体想法和b 我提议的实现的反馈 基本想法很简单 我想创建一个 ASP MVC 应用程序 将来可以使用其他控制器和视图进行扩展 而无需重新编译代码 这个
  • 同时冻结第 1 行和 A 列

    我想在 Excel 2010 中同时 冻结 第 1 行和 A 列 这可能吗 选择单元格 B2 并单击 冻结窗格 这将冻结第 1 行和 A 列 为了便于将来参考 在 Excel 中选择 冻结窗格 将冻结所选单元格上方的行以及所选单元格左侧的列
  • 如何使用分页库在回收器视图中添加日期分隔符?

    经过大量搜索 我知道使用常规适配器是可能的 但我不知道如何使用分页库来做到这一点 我不需要代码 只是一个线索 Example 要添加分隔符 您基本上有两个选择 基于视图 您显式地将分隔符作为 项目 包含在列表中 并为这些分隔符定义新的视图类
  • 在Eclipse中添加注释掉代码的快捷按钮

    只是想知道是否有一种方法可以在 Eclipse 编辑器中添加一个按钮 就像在 Visual Studio 中一样 在 Java 视图 中快速注释或取消注释选定的代码块 Using the keyboard shortcut isn t ea
  • React 中大括号的使用

    我正在尝试学习 React 我在使用花括号时遇到问题 JSX 和 JS 之间使用大括号的区别 在下面的代码中 大括号 1 表示 现在是 JS 为什么有花括号 2 它已经在花括号区域内了吗 var React require react va
  • 如何在 suave webpart 中设置 Json 响应

    我从 Suave 和 F 开始 我正在尝试在我的 web 部件中传递一个 json 序列化对象以在我的响应中获取它 在 php 中我有这个 player1Key hdegftzj25 gameKey aegfhzkfszl
  • Swift:如何在 UITableViewController(包含 UICollectionView)中使用“didSelectItemAtIndexPath”?

    我有一个UITableViewController 在 的里面TableViewCell 它是UICollectionView 我想传递来自CollectionViewCell to a DetailViewController当用户点击单
  • 为什么 localhost 不会在 chrome (OSX) 中路由到 127.0.0.1?

    当我使用 node debug 启动脚本时 它尝试导航到 URL localhost debug port 5858 但找不到那里提供的页面 如果我将 localhost 更改为 127 0 0 1 一切正常 我可以 ping localh
  • ELF 文件头

    关于 elf 文件头的一个简单问题 我似乎找不到任何关于如何在 elf 头中添加 更改字段的有用信息 我希望能够更改幻数并向标题添加构建日期 以及可能的其他一些内容 据我了解 链接器创建标头信息 但我在 LD 脚本中没有看到任何引用它的内容
  • onKeyEvent 和辅助服务

    我的用户将使用启用 TalkBack 的服务或其他一些无障碍服务 我想捕获我们应用程序中的 onKeyEvent 事件 但该事件被分派到启用的辅助功能服务 我创建了以下基本辅助服务 public class Accessibility Se
  • PHP - 外部类/库可以从 apache 访问,但不能从 phpunit 访问

    我在我的 Web 应用程序中使用 ZeroMQ 套接字库 我已经配置了 php ini 以便 Apache 可以使用 ZMQ 但我不知道 phpunit 如何使用它 phpunit 不使用与 apache 使用相同的 php ini 吗 在
  • 如何将 ZIP 文件从 API 管理上传到 Blob 存储

    我正在对我的 Azure Api 管理 API 之一发送 POST 请求 在此 post 请求中 有一个 json 正文 其中包含 base64 编码数据 zip 文件 如下例所示 foo 酒吧 数据 你的base64字符串 在 API 策
  • 具有多个绑定的ServiceHostFactory

    如何使用具有多个绑定的 ServiceHostFactory 这是我尝试过的方法 但我不断遇到问题 一个又一个错误 using System using System Collections Generic using System Lin
  • 获取表情符号字符的描述

    每个表情符号都有一个描述 您可以在 Mac 操作系统中看到 Space特殊字符选择器 有这里有他们的名单 http www grumdrig com emoji list 有没有办法让我在代码中查询此描述 无需将它们全部输入到结构中 我想做
  • 使用 C# 计算 HMACSHA256 以匹配支付提供商示例

    对于支付提供商 我需要使用 HMAC SHA256 计算基于哈希的消息身份验证代码 这给我带来了很大的麻烦 支付提供商以伪代码形式给出了两个正确计算验证码的示例 所有密钥均为十六进制 Method 1 key 57617b5d2349434
  • 如何在 Cocoa Touch 中验证网站证书?

    我目前使用 NSURLConnection 打开到 Web 服务器的 https 连接 一切正常 我能够检索我想要的页面内容 该证书是由 VeriSign 颁发的 我假设 NSURLConnection 做了一些工作来在某种程度上验证证书的
  • 在java中将对象声明为final

    有人可以澄清以下代码的意义吗 class A int i 10 public void setI int b i b public int getI return i class Test public static void main S
  • WinForms 应用程序中的初始化代码 - Program.cs 还是 MainForm?

    我有一个 Windows 窗体应用程序 当前在启动时加载数据库 流程是这样的 Program cs gt Application Run new MainForm gt MainForm 构造函数 gt 打开数据库 因此基本上 MainFo