第二次调用表单时未处理表单加载事件

2023-11-29

为什么以下不起作用?

两种形式;第一个调用第二个。第二个表单上有一个 DataGridView - 它没有列,它们是由程序添加的,以及一个 DataGridViewButtonColumn。

第一次调用 Form2 效果很好。但第二次调用它时,按钮没有任何文本。

' The first form - has one button, which calls Form2
Public Class Form1
    Friend fruit As New List(Of Fruit)

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        fruit.Add(New Fruit("Apple", "Red"))
        fruit.Add(New Fruit("Orange", "Orange"))
        fruit.Add(New Fruit("Banana", "Yellow"))
        fruit.Add(New Fruit("Melon", "Red"))
        fruit.Add(New Fruit("Pear", "Green"))
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Form2.ShowDialog()
    End Sub
End Class


Public Class Fruit
    Public Property name As String
    Public Property colour As String
    Public Sub New(newName As String, newColour As String)
        name = newName
        colour = newColour
    End Sub
End Class

第二种形式的代码是:

' Form2 has a button which closes the form, and a DataGridView
Public Class Form2
    Dim dataGridViewButtonColumn1 As DataGridViewButtonColumn
    Dim setupAlready As Boolean = False

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        dataGridViewButtonColumn1 = New DataGridViewButtonColumn
        DataGridView1.DataSource = Form1.fruit
        With dataGridViewButtonColumn1
            .Name = "ButtonCol"
            .UseColumnTextForButtonValue = False
        End With
        If Not setupAlready Then
            DataGridView1.Columns.Add(dataGridViewButtonColumn1)
        End If
        For i As Integer = 0 To 4
            DataGridView1.Rows(i).Cells("ButtonCol").Value = "Hello"
        Next
        setupAlready = True
    End Sub

    Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) _
                Handles DataGridView1.CellContentClick
        Debug.Print(String.Format("Col={0}, Row={1}, ColName={2}", e.ColumnIndex, e.RowIndex, DataGridView1.Columns(e.ColumnIndex).Name))
        If (DataGridView1.Rows.Item(e.RowIndex).Cells("ButtonCol").Value Is "Hello") Then
            DataGridView1.Rows.Item(e.RowIndex).Cells("ButtonCol").Value = "GoodBye"
            DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LightGreen
        End If
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Close()
    End Sub
End Class

我认为造成这种情况的原因有很多。首先,表单是类,应该显式实例化。代替Form2.ShowDialog()做这个:

Using frm As New Form2        ' create instance
   frm.ShowDialog
   ' do something
End Using                     ' dialogs are also a resource

Using/ .Dispose普通表单不需要,因为当您关闭它们时,它们就会被丢弃。对话框则不然,因为我们通常只是隐藏它们,以便我们可以从中获取信息。

接下来,仅在您第一次显示表单时调用 Form_Load 事件。看MSDN: Occurs before a form is displayed for the first time.

因此,通过重复使用未处置的Form2,不会调用 Load 事件,并且不会执行 Load 事件中的代码。如果您处理并创建新的表单实例,它应该可以正常工作。顺便说一句,这适用于所有表单,而不仅仅是对话框。

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

第二次调用表单时未处理表单加载事件 的相关文章

随机推荐

  • 如何在 C#.NET 中更改图像的像素颜色

    我正在Java中处理图像 我设计了超过100多个图像 png 格式 它们都是透明和黑色绘图 问题是 现在我被要求更改绘图的颜色 黑色 我在谷歌上搜索了许多代码 这些代码改变了图像的位图 像素 但我不猜测我必须做什么来匹配确切的像素 并在图像
  • 构建战争时删除插件视图(gsp)

    我们在 grails 应用程序中使用各种插件 如日志记录 spring security core ui acl 等 现在这些插件带有默认的 gsp 在每个插件的视图文件夹中 我想构建一个 WAR 而不包含任何插件的视图 因此 当战争现在构
  • ASP.NET 中的多选下拉列表

    asp net 是否存在任何好的带有复选框 webcontrol 的多选下拉列表 多谢 你可以使用System Web UI WebControls CheckBoxList控制或使用System Web UI WebControls Li
  • android 棒棒糖通知背景颜色

    是否可以更改 android lollipop 中通知的背景颜色 我注意到有些通知是白色的 有些是浅灰色的 有些是深灰色的 source gottabemobile com source sftcdn net 您可以看到音乐播放器通知具有深
  • 如何使用PyTorch计算偏导数?

    我想使用 PyTorch 获取输出和输入之间的偏导数 假设我有一个函数Y 5 x1 4 3 x2 3 7 x1 2 9 x2 5 然后我训练一个网络来替换这个函数 然后我使用 autograd 来计算dYdx1 dYdx2 net torc
  • 将 pandas 数据框中的所有行除以特定行

    我有一个 pandas 数据框 如下所示 Sample name C14 Cer mean C16 Cer mean C18 Cer mean C18 1 Cer mean 0 1 1 0 124749 0 285659 35 302029
  • EC2 启动时自动启动 docker-compose

    我有一个 Linux AMI 2 AWS 实例 其中包含一些通过 docker compose 编排的服务 并且我使用 docker compose up 或 docker compose start 命令来启动它们 现在我每天都会自动启动
  • 通过 ssh 包装命令:如何管理复杂的引号?

    我使用 HPC 集群 计算节点无法访问互联网 只能访问前端 所以我想包装所有需要访问互联网的命令 以便在正面执行它们 例如 对于 wget bin bash ssh frontal bin wget gt 工作正常 我必须包装这个 bq g
  • 生成所有可能的深度为 N 的树?

    我有几种不同类型的树节点 每个节点可能有 0 到 5 个子节点 我正在尝试找出一种算法来生成所有可能的深度 Here s a Python program I wrote up that I think does what you re a
  • ANTLR 词法分析器如何消除其规则的歧义(或者为什么我的解析器会产生“输入不匹配”错误)?

    Note 这是一个自答问题旨在为 ANTLR 用户最常犯的错误之一提供参考 当我测试这个非常简单的语法时 grammar KeyValues keyValueList keyValue keyValue key IDENTIFIER val
  • 如何在可能没有托管配置提供程序的应用程序中使用托管配置?

    我正在开发一个可在 2 个不同的 Android 环境 消费者和企业市场 中运行的应用程序 假设它是一个短信应用程序 需要管理十几个配置参数 第一个环境是未启用 Android Enterprise AfW 功能的标准 Android 设备
  • 在哪里可以找到 http url 方案 rfc

    在RFC3986中 它排除了RFC1738中定义各个URI方案的特定语法的部分 并且文档说这些部分将作为单独的文档进行更新 但我找不到它 任何人都可以告诉我在哪里可以找到更新的单独文档 我想写一个HTTP URL方案解析强文本 所以我需要引
  • 哪个 NuGet 包包含 System.Web.Routing?

    我想使用 NuGet 处理我的 Web 应用程序引用 哪个 NuGet 包包含 System Web Routing I ve 搜索了 NuGet 网站 它不在 NuGet 包中 在里面System Web程序集 NET Framework
  • Django 不会为新的应用程序模型创建新的 sqlite 表

    我对 Django 很陌生 我遇到了新模型 以及我制作的新应用程序 博客 的问题 配置模型和 makemigration 后 表 blog post 不存在 这是我所做的所有过程 我正在遵循官方教程 这是我的博客 models py fro
  • JQuery - 删除具有特定类的类子元素[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 如果我有这个 html div class parent div class child div div class blackSheep div div class child di
  • Delphi中将字符串分割成固定长度部分的快速方法

    我需要将一个字符串拆分为具有固定长度子字符串的 TStringList 目前我使用 procedure StrToStringList ASource string AList TStrings AFixedLen Integer begi
  • Python隐藏控制台窗口

    我创建了一个小的 Python 应用程序 我希望它在进程中间隐藏控制台窗口 因此将其重命名为 pyw 并不能解决问题 最好有某种功能来最小化窗口 有什么想法吗 在 Windows 上您可以使用win32api from win32 impo
  • SWIFT 如何创建 NSCoding 子类并从另一个类调用它?

    我在 NSCoding 上发现了这段黑色代码 它几乎确实想要我想要的 我找到它的地方的链接如下 如何在其他类中创建 NSCoding 类和用户 下面的代码不起作用 我希望有人能帮助我解决这个问题 import Foundation impo
  • 使用 R 抓取“aspx”页面

    有人可以帮助我或给我一些建议如何从此网址中抓取表格 https www promet si portal sl stevci prometa aspx 我尝试使用说明和包rvest httr 和 html但对于这个特定的网站没有任何成功 谢
  • 第二次调用表单时未处理表单加载事件

    为什么以下不起作用 两种形式 第一个调用第二个 第二个表单上有一个 DataGridView 它没有列 它们是由程序添加的 以及一个 DataGridViewButtonColumn 第一次调用 Form2 效果很好 但第二次调用它时 按钮