2

因此,我有一个程序,我从该程序中从数据网格中检索数据并逐个遍历网格,但是当我Me.Hide使用frmQuiz.ShowfrmQuiz 表格,因此它最终出现在我上次留下的记录中。这是表单的 Load 事件中的代码


   Private Sub frmQuiz_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    tracker = 0 'to keep track of which record to retrieve from datagrid,in this case the first

    'TODO: This line of code loads data into the 'CompLitDataSet.tblQuestions' table. You can move, or remove it, as needed.
    Me.TblQuestionsTableAdapter.Fill(Me.CompLitDataSet.tblQuestions)
    hideGrid()
    dgData.DataSource = TblQuestionsTableAdapter.GetAllUnsorted
    Me.StartPosition = FormStartPosition.CenterParent 'load form at center screen
    ReDim answers(TblQuestionsBindingSource.Count)

    lblQuestion.Text = ""
    lblQuestionNumber.Text = ""
    PictureBox1.Visible = False
    radA.Checked = False
    radB.Checked = False
    radC.Checked = False
    radD.Checked = False

    viewQuestions(0) 'show first questions

End Sub
4

4 回答 4

2

Me.Hide只是使表单不可见,它仍然加载到内存中并可以通过代码访问。

Me.Close从内存中卸载表单并且不再可以通过代码访问。

于 2013-07-29T15:12:36.053 回答
1

您的表单没有被重新加载。

检查文档:Form.Load 事件

在第一次显示表单之前发生。

不幸的是,当表单被隐藏或显示时似乎没有任何事件——除非它是第一次显示,这将触发Load然后Shown.

不过,表单关闭时和关闭后都有一些事件。您可能想要使用这些。如果与表单相关的对象的状态对您很重要,您应该将这些状态存储在您可以在重新创建表单时恢复它的地方。

于 2013-07-29T15:10:05.363 回答
1

它不会触发您的 Form_Load 事件,因为您正在“隐藏”您的表单。
您应该关闭您的表单,然后再次显示。

于 2013-07-29T15:11:09.433 回答
0

您可能希望将代码从Form_Load处理程序移动到VisibleChanged处理程序:

Private Sub Form1_VisibleChanged(sender As Object,
                                 e As System.EventArgs) Handles Me.VisibleChanged
  If CType(sender, Form)).Visible = True Then 'your code here
End Sub
于 2013-07-29T15:22:09.297 回答