在表单之间翻转时如何保留表单的控制值

2024-01-29

需要两种形式才能输入特定交易的所有信息。我希望能够在这两个表单之间来回翻转,保留在每个表单上输入的内容,直到单击“保存”按钮。

我想我应该能够使用 Form2.Show、Me.Hide,然后使用 Form1.Show、Me.Hide。 我第一次进入 Form2 时,它会经历 Form2 加载事件(这是合理的),但 Form1 上的控件内容的任何知识都已丢失。即使 Form1 被隐藏(并且未关闭),其控件的内容也消失了。为什么?

我第二次转到 Form2 时,加载事件不会触发,因为 Form2 被隐藏,此时所有 Form1 控件内容都可用。因此,在 Form1 和 Form2 之间来回翻转时,第二次转到 Form2 后,它会按照我想要的方式工作。但是,我需要它第一次和每次都能工作。

几天来我一直试图理解这一点。我已经注释掉了几乎每一行代码,单步执行代码,用谷歌搜索直到我脸色发青(已经有很多关于这方面的文章了),但我仍然不明白为什么会出现这种行为。

谁能解释这个现象吗?或者更好的是告诉我我需要做什么才能使这项工作成功。

我在 Form1 按钮后面有这段代码,用于转到 Form2

If Form2 Is Nothing Then
    Dim Form2 As New Form2
End If
Form2.Show()
Me.Hide()

这段代码后面的Form2按钮返回到Form1

Form1.Show
Me.Hide

这就是您可能缺少的一切:

Class Form1
     Private f2 As Form2       ' this is Form1's reference to the
                               ' form2 instance

稍后,当您单击转到 form2 时,您的原始代码只需要稍作调整:

If f2 Is Nothing Then
    f2 = New Form2(Me)             ' set declared variable to new instance   
End If
F2.Show()
Me.Hide()

在本例中,Form1 使用以下方式传递引用之前给你展示的把戏 https://stackoverflow.com/questions/23142865/passing-objects-between-forms使用构造函数:

Sub New(frm As Form1)         ' this is in Form2 only
   f1 = frm               
End Sub

您在 Form1 中不需要它,因为他/它正在创建自己的 f2 对象引用。

原始代码中的主要问题是:Dim Form2 As New Form2。您每次都会创建一个新的 Form2(我怀疑它驻留在事件或子事件中)。那些新的instances无法知道之前实例中的控制值。声明F1 or F2如图所示给出模块/表单级别Scope.

Dim声明一个变量及其类型。 f1 的类型为 Form1。如果它是对象变量,则不会创建对象

New创建对象类型(引用类型)的实例。这直接关系到Sub New类中的方法。当你使用New, Sub New被调用,以便任何需要的特殊事情都可以在那里发生。值类型如Integer不需要创建或实例化,只需声明。

Where你声明(Dim) 一个变量决定了它的Scope。如果您在 Sub 中执行此操作,则变量或对象仅存在于该 sub 中。如果您在表单/类级别执行此操作,则它具有表单/类级别范围。

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

在表单之间翻转时如何保留表单的控制值 的相关文章

  • 如何防止弹出表单夺走父级的焦点

    我有一个小的 windows form 当鼠标悬停在 windows Form 上的某个区域上时 我用它来显示信息 但是当它设置为可见时 它会从父窗口获取焦点 有没有办法防止这种情况 它会导致主窗体在焦点和焦点之间切换时闪烁 时间 2019
  • 从嵌入 C# 的浏览器控件获取 HTML 源代码

    我有一个嵌入在 C Windows 应用程序中的浏览器控件 我想获取渲染的 HTML 可能已被 javascript 修改 而不是原始 HTML 有什么建议么 您可以获取 HTML 并确实设置它 使用WebBrowser DocumentT
  • 标签中的路径显示

    NET 中有没有自动修剪路径字符串的方法 例如 C Documents and Settings nick My Documents Tests demo data demo data emx becomes C Documents dem
  • 使用正则表达式验证器上传文件不适用于仅 Firefox IE

    我有一个带有 RegularExpressionValidator 的 FileUpload 和以下验证表达式 a zA Z 2 w w w gif jpg JPG JPEG GIF jpeg png bmp 3dm 3dmf ai drw
  • 如何使用 winforms 在 vb.net 中制作大型按钮网格(24x20 或类似)?

    我正在 vb net WinForms 中制作一个座位预订系统 我需要用户能够选择他们想要使用的座位并改变颜色 这样他们就可以知道它已选择 我开始尝试使用按钮 但 480 个按钮严重减慢了表单的加载时间 然后我尝试了在行 列中带有按钮的数据
  • 将组合框添加到 DataGridView 标头

    当我运行代码时 dataGridView TopLeftHeaderCell 也有一个组合框 我怎样才能改变这一点 这是我的代码 public void AddHeaders DataGridView dataGridView for in
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 根据所选单选按钮启用文本框

    我有一个单选按钮列表 其中列出了不同的业务类别 最后一个选项是Other类别 当用户选择Other类别 我希望能够启用一个文本框 用户可以输入更多信息来解释Other选择 目前 我正在尝试 If rblCategory SelectedIn
  • 无法在 VB MVC 应用程序中创建 HtmlHelper 方法

    我无法弄清楚以下代码中缺少什么 我有一个应该添加 虚拟 辅助扩展的方法 Imports System Runtime CompilerServices Namespace HtmlHelpers Public Module HelpExte
  • 如何在输入错误的情况下回滚 gridview 中的更改

    我有一个绑定到对象列表的 DataGridView 它有一些用户可以编辑的列 某些输入对于整个行来说是不允许的 如果用户在某些单元格中输入无效输入 我该如何回滚 我尝试使用 RowValidating 事件处理程序 但在更改单元格值后未调用
  • Visual Studio 改变 Ctrl-K-D 的工作方式

    In Visual Studio I m using 2012 is there any way of editing the way that Ctrl K D combinations handles its Auto Formatti
  • 通过 VB.NET 创建/编辑文本文件

    如何在 VB NET 中编写以下算法的代码 Procedure logfile if C textfile txt exist then open the textfile else create the textfile end if g
  • 即使 keypreview = true,按钮也会阻止 KeyDown 事件触发

    在 VS Express 12 中重现的步骤 创建一个新的 Windows 窗体应用程序项目 添加按钮 将 Form KeyPreview 设置为 true 向表单添加 keyDown 事件 只要按钮存在于表单上 事件就不会触发 我有一个项
  • 检测非聚焦窗口上的鼠标滚轮?

    我的目标是制作一个浮动工具栏 作为其自己的 C 应用程序 当用户在我上方使用滚轮时 我想更改可见的按钮 听起来很简单 应该只是这句话的问题 MouseWheel new MouseEventHandler Form1 MouseWheel
  • 项目:为了评估索引属性,该属性必须经过限定,并且参数必须由用户显式提供。

    我创建了多个组合框 从中我从创建的存储过程中提取了每个组合框的数据 所有这些框一直工作到今天早些时候 其中 2 个组合框停止工作 检查行的 立即窗口 和列 我得到了列的结果 但是当我检查列时 例如 dsContactTitles Table
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • Outlook 加载项,无法读取未定义的属性“BeginRequestEventArgs”

    我使用 Visual Studio 开发了 Outlook 插件 我的插件有一个按钮 用于填充会议邀请正文中的详细信息并添加所需的与会者 这在 99 的情况下都有效 但是 时不时地它会给我下面的 JavaScript 错误 Uncaught
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 将签名位图转换为签名字符串(很奇怪的一个)

    基本上我需要将位图图像转换为字符串 但这不是常见的 困境在于该字符串由两部分组成 1 积分 2 线路 我需要将图像转换为由 分隔的两个部分 我得到的一个例子是 221A 221A270A270A25032503200720071716171

随机推荐