在 VB.NET 中跨表单共享变量的最佳实践

2023-12-08

我需要在 VB.NET 中的两个窗体之间共享变量。其中一个是主窗体,另一个是子窗体。

我一直在寻找,找到了一些方法。我想用最好的方法来做到这一点。我在下面列出了几个选项。请评论哪一个是最佳选择:

  1. 在其中一种形式中创建静态/共享变量,并通过以下方式在其他形式中访问它:

    Form1 frm = new Form1(); // Creating object of parent to access shared variable
    frm.a = "abc"; // Passing value
    
  2. 创建子窗体时将主窗体的实例发送到子窗体。然后可以通过属性函数访问这些变量。

  3. 在模块中创建全局变量。这似乎是最简单的选择,但我怀疑这是最好的选择。

  4. 我还阅读了一些有关代表和事件的内容,但我不知道如何实现这一点。

如果还有其他我没有提到的方法,请与我分享。


这个问题没有一个答案。您列出的所有方法都应该“有效”。您应该使用哪个取决于您想要共享变量的原因。例如:

  1. 假设您有一个包含记录列表的表单,并且用户双击了一条记录,因此您想要打开一个新表单来编辑该记录,并且想要传递记录 ID。在这种情况下,我将向第二种形式添加一个构造函数方法: 子新建(RecordID 作为字符串) '在此处添加加载记录的代码 结束子

  2. 假设应用程序中的某些表单可能想知道数据库路径或其他类似的全局信息。为此,我会将父表单上的适当变量设置为公共变量(称为“字段”),并以 MainForm.FieldName 的形式访问它。 (免责声明:纯粹主义者会说您不应该依赖这样一个有点混乱的事实:VB.NET 自动实例化表单类的实例并让您通过表单名称引用它,而您应该获得一个指向实际表单类的指针。表单的实例并将其存储在您的子表单中,然后像这样访问父表单。实际上,这就像您帖子中的数字“2”。但如果您不介意程序错误,则实际上没有必要。)

  3. 假设您的应用程序中有一些全局信息,例如应用程序启动的时间,那么您可以告诉用户“您已经使用该应用程序 5 个小时了,开始生活吧!”这些东西可以存储在模块中。 (或者在应用程序类中,但这是相当隐藏的)

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

在 VB.NET 中跨表单共享变量的最佳实践 的相关文章

  • 您可以将委托函数作为可选参数传递吗?

    我知道在 Visual Basic 中 委托函数不能contain可选参数 但是方法可以将委托作为可选参数吗 我想做的是这样的 Delegate Sub MyDelegate ByVal input As String Sub MyDele
  • 从 VB.NET 应用程序填写 PDF 表单

    我的任务是在 VB Net 中创建一个 Windows 应用程序 要求之一是从 MSSQL 数据库读取数据 并将某些值放入 PDF 表单中 如何使用 VB Net 将数据放入预先存在的 PDF 文件中 另外 是否可以将PDF文件作为资源放入
  • 从文件资源管理器打开我的应用程序中的文件

    我在 VB NET 中创建了自己的应用程序 该应用程序将其文档保存到具有自己的自定义扩展名 eds 的文件中 假设我已将文件扩展名与我的应用程序正确关联 那么当我在文件资源管理器中双击该文件时 如何实际处理应用程序中所选文件的处理 我是在
  • ArrayList 搜索 .net

    以下是存储在我的数组列表中的数据的格式 A Amsterdam B Brussels C Canada 如此等等 我想通过仅传递前几个字符直到 来搜索我的数组列表 因此 如果我有类似 AA Test 的东西 那么我只想通过 AA 来检查它是
  • 如何使用网络浏览器控件填写 html 表单

    在VB6 classic中 我们可以这样做 Private Sub Form Load WebBrowser1 Navigate2 http yourSite com End Sub Private Sub Command1 Click W
  • System.Linq.Dynamic 不支持 OrderByDescending("someColumn")?

    好的 在我们的项目中 我使用 System Linq Dynamic 库 但我刚刚注意到我无法执行以下操作 myDataSource OrderByDescending someColumnName 因为我收到以下错误 重载解析失败 因为无
  • 在VB.net中动态添加用户控件

    我在 Vb net Windows 应用程序 中制作了自定义 UserControl 如何将其动态添加到表单中 UserControl 本质上只是另一个类 它继承自 Control 因此您可以使用控件执行各种操作 但除此之外它只是一个类 因
  • WPF DataGrid 排序后滚动到顶部

    我有一个使用数据网格的 Net 4 0 WPF 应用程序 目前 按列排序后 网格的滚动位置保持在排序前的位置 对于此应用程序 我需要在任何排序后滚动到网格顶部 我尝试过像这样处理排序事件 Private Sub myDataGrid Sor
  • Gridview rowdatabound访问数据项vb

    我正在尝试将 ImageUrl 指向 GridView 中模板字段中的图像 但不断收到错误 你调用的对象是空的 在这一行 Dim imagePath As String rowView image path 我以前从未在 GridView
  • Windows 服务应用程序中自托管 ASP.NET Web API 的问题

    我在网上看到了一些文章 描述了如何在 Windows 服务应用程序中自行托管 ASP NET Web API 请参阅here http www piotrwalat net hosting web api in windows servic
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 循环内声明的变量在循环的每次迭代中保持值

    我无法确定这是一个错误还是一个功能 For i 0 To 4 Dim strTest As String If i 0 Then strTest test value End If Console WriteLine strTest Nex
  • 如何使用 VB.NET 以编程方式在 Richtextbox 中添加粗体文本

    我有这个代码 print text Text Patient number ds Tables patients Rows 0 Item 0 print text AppendText Environment NewLine print t
  • 如果图像包含特定颜色则

    是否有一种简单的方法来检查图像是否包含特定的 RGB 颜色 例如 Dim img As Image Image FromFile C image png If img contains color red toRGB then 我认为检查这
  • 使用 Canon EDSDK 2.5.2 VB.NET 实时查看

    我正在尝试做两件事中的一件 第一件事 使用 VB NET 和 Canon EDSDK 2 5 2 打开实时视图 并在 Windows 窗体应用程序中渲染实时输出 目前我正在尝试将其放入图片框 不过 我肯定愿意接受建议 第二个选项是至少打开实
  • 运行命令行进程并在该进程仍在运行时获取输出?

    如何运行命令行进程并在该进程仍在运行时获取输出 我的意思是使用自己的进度条运行 CLI 进程 可执行文件本身需要很长时间才能完成操作 所以我想从自己的进程中获取进度信息来显示我的应用程序中的进度 否则我不这样做在进程完成之前没有任何信息来显
  • dotNet:有没有办法在 UI 线程上执行 Join 语句?

    我正在编写一个简单的线程应用程序 当单击开始按钮时 应用程序禁用此按钮 运行 5 个线程 只需进行 For 迭代并更新 5 个进度条 最后一个线程正在等待线程结束 以重新启用我的开始按钮 问题 用户看到按钮在进度条达到 100 之前已启用
  • Dictionary(Of String, String) 和 IDictionary(Of String, String) 有什么区别

    我可以用 IDictionary 做更多或更少的事情吗 这两个集合有何不同 IDictionary 只是一个接口 一个描述实现类必须执行的操作的契约 Dictionary 是一个实现该接口的具体类 因此必须提供 IDictionary 接口
  • 中断/退出嵌套在 vb.net 中

    如何摆脱 vb net 中的嵌套 for 或循环 我尝试使用 exit for 但它只跳转或中断了一个 for 循环 我怎样才能做到以下几点 for each item in itemList for each item1 in itemL
  • 在组合框中设置所选项目 - vb.net

    我正在使用此代码向与显示的不同的组合框添加一个值 如何为组合框项目添加值 https stackoverflow com questions 1887388 how to add value to combobox item 假设我的组合框

随机推荐

  • 如何使用 oozie 安排 sqoop 操作

    我是 Oozie 的新手 只是想知道 如何使用 Oozie 安排 sqoop 作业 我知道 sqoop 操作可以添加为 Oozie 工作流程的一部分 但是我如何安排 sqoop 操作并让它每隔 2 分钟或每天晚上 8 点自动运行一次 只是一
  • JDBC-JTDS 错误?对于日期和时间 (x) 类型的列

    当我尝试从中获取列类型时ResultSetMetaData用方法getColumnTypeName对于类型date and time x 我越来越nvarchar 对于其他类型似乎效果很好 这是一个错误吗 和ResultSet getStr
  • 为什么Golang创建切片时会有CAPACITY参数

    这是一个非常简单的问题 If the capacityGolang中的一个切片的容量是可以被超出的 为什么首先要有一个容量参数呢 我认为这与内存管理 某种 知道在内存中分配切片的位置 但我不确切知道 If the capacityGolan
  • MSChart 轴线

    如何显示图表中每个条形的轴线 我只有第二个 第四个 替代文本 http img35 imageshack us img35 6106 chartiu png 我找到了答案 chartArea AxisX MajorGrid Interval
  • 控制 ggparcoord 中的颜色(来自 GGally 包)

    我正在尝试对特定 ggparcoord 图硬编码所需的线条颜色 例如 当我创建下面的 ggparcoord 图时 library GGally x data frame a runif 100 0 1 b runif 100 0 1 c r
  • Bash - 查找匹配的文件对[重复]

    这个问题在这里已经有答案了 我的文件夹中有很多文件 Filename1 mp4 Filename2 mp4 Filename3 mp4 Etc 以及许多名称添加后缀的文件 Filename1 x264 mp4 Filename2 x264
  • 脚本无法正确接收 url

    我正在使用组合的批处理和java脚本 我发现使用批处理文件从网站检索html 而我们解决的一个问题是没有返回所需的输出 就像我在firefox中使用url时出现的那样 我用来拉取 html 的脚本是 if This IsBatch then
  • 我应该如何循环遍历依赖于前一个循环值的异步函数?

    我试图在 node js 中执行的操作的同步版本 为了可读性而简化 var value null var allValues do value getValue value load the next value if value allV
  • iframe 中的在新窗口中打开链接

    我的页面上有一个 iframe 并且有一个链接 在同一域上 我想在新的物理窗口中打开 当我使用 target blank 时 它只是使用新的 iframe 重新加载页面 我还尝试了这个 JavaScript jQuery 代码 docume
  • 带有用户单击所选组件的动态选项卡

    我正在尝试设置一个选项卡系统 允许组件自行注册 带有标题 第一个选项卡就像一个收件箱 有很多操作 链接项可供用户选择 并且每次单击都应该能够在单击时实例化一个新组件 操作 链接来自 JSON 然后 实例化的组件会将其自身注册为新选项卡 我不
  • Swagger 多个示例未显示

    当我将示例添加到我的 swagger 文档中并在 swagger 编辑器上测试它时 它永远不会显示在任何地方 有人能给我一个例子 说明多个示例实际上在任何地方显示吗 Here is an example of how multiple ex
  • 我想设置每天不同时间触发的重复闹钟

    我需要每天日出时触发闹钟 我得到的日出时间是这样的 06 55 Location location new Location latitude longitude SunriseSunsetCalculator calculator new
  • 安卓:撤销权限

    再会 我正在尝试制作捕获图像然后将其显示在 gridview 中的应用程序 但是当我单击按钮开始捕获时出现此错误 Logcat java lang SecurityException Permission Denial starting I
  • 如何让所有 .py 文件通过 Spyder 启动?

    我使用 Anaconda 安装了 Spyder 并且可以使用开始菜单 Win10 中的 Spyder 图标启动 IDE 我想设置我的首选项以打开所有 py文件与 Spyder 所以我按照 Spyder 开始菜单按钮找到可执行文件 pytho
  • 使用 JavaScript 检查 HTML 片段是否有效

    我需要一个可靠的 JavaScript 库 函数来检查我可以从代码中调用的 HTML 片段是否有效 例如 它应该检查打开的标签和引号是否闭合 嵌套是否正确等 我不希望验证失败 因为某些东西不是 100 标准 但无论如何都会起作用 Updat
  • 矩阵求幂方法JAVA

    我很难创建一种方法来提高矩阵的幂 我尝试使用这个 public static int powerMethod int matrix int power int temp matrix for int i power i 1 i temp t
  • 在Excel中将大时间格式转换为小数

    我正在尝试将 Excel 中的大时间值转换为小时的十进制数 我目前有一列为呼叫中心添加了 就绪时间 总和为 3545 20 02 我现在希望以十进制格式显示相同的时间 例如3545 333 因为它用于另一个计算 作为参考 当我将上述时间转换
  • 如何在 Windows 10 和 Python 3.8 上安装适用于 C# (VS2019) 的 Python.NET?

    Python NET的官方网站上说支持Python 3 8 伟大的 现在我有兴趣从用 C NET Framework v4 7 2 开发的应用程序调用现有的 python 3 8 模块 EDITS 由于 Python NET 的作者几乎没有
  • 限制 Github API 只能访问某个用户的一个存储库

    我们有一个 Web 应用程序 它允许用户编写代码并将其存储在我们服务器上的内部 git 存储库中 现在我们希望允许用户与他的 github 存储库共享他的代码 于是我们查阅了github的api文档 找到了通过ouath2的方法 然而 为了
  • 在 VB.NET 中跨表单共享变量的最佳实践

    我需要在 VB NET 中的两个窗体之间共享变量 其中一个是主窗体 另一个是子窗体 我一直在寻找 找到了一些方法 我想用最好的方法来做到这一点 我在下面列出了几个选项 请评论哪一个是最佳选择 在其中一种形式中创建静态 共享变量 并通过以下方