4

也许首先我会介绍我的申请。例如,当一名员工登录我的应用程序时,他将加载“员工菜单”:

    Dim Empl As New Employee
MainGrid.Children.Add(Empl)
Grid.SetRow(Empl, 1)

这是来自 Window_Loaded 事件。菜单是用户控件,我有几个按钮可以打开和操作另一个用户控件。当我按下例如按钮“问题”时:

Public Class Employee
    Dim mw As New MainWindow
    Private Sub btnQuestionAdd_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnQuestionAdd.Click
        Dim Que As New QuestionAdd
        mw.MainGrid.Children.Add(Que)
        Grid.SetRow(Que, 2)
        Grid.SetColumn(Que, 1)
    End Sub
End Class

我不知道为什么在 button_click 之后什么都没有加载.....从其他控件导航主窗口网格很难吗?

4

1 回答 1

1

这只是一个猜测,因为您没有提供太多信息,但我注意到以下问题可能是罪魁祸首。

在您的第一个代码片段中,您似乎是从 MainForm 创建员工:

Dim Empl As New Employee
MainGrid.Children.Add(Empl)
Grid.SetRow(Empl, 1)

您的以下评论似乎证实了这一假设:

这是来自 Window_Loaded 事件。菜单是用户控件,我有几个按钮可以打开和操作另一个用户控件。当我按下例如按钮“问题”时

然而,在您的 Employee 类中,您正在创建一个全新的 MainWindow 实例,然后向其中添加数据:

Public Class Employee
    Dim mw As New MainWindow
    Private Sub btnQuestionAdd_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnQuestionAdd.Click
        Dim Que As New QuestionAdd
        mw.MainGrid.Children.Add(Que)
        Grid.SetRow(Que, 2)
        Grid.SetColumn(Que, 1)
    End Sub
End Class

如果这个观察是正确的,那么我认为你需要回到书本上去理解实例的概念。

您实际上创建了第二个表单(由于您从未明确显示它而被隐藏),然后修改了第二个表单而不是原始表单。为了证明这个假设,请尝试添加以下代码行:

Public Class Employee
    Dim mw As New MainWindow
    Private Sub btnQuestionAdd_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnQuestionAdd.Click
        Dim Que As New QuestionAdd
        mw.MainGrid.Children.Add(Que)
        Grid.SetRow(Que, 2)
        Grid.SetColumn(Que, 1)
        mw.Show() ' <---
    End Sub
End Class

您可能会看到第二个表单弹出,其中包含您对第一个表单的期望的所有更改。

至于如何解决这个问题,最简单的方法是将参数添加到您的初始化程序(“Sub New”),它接受 MainForm 作为值。然后,您可以将值分配给字段或属性(可能只是您的mw字段)并继续您的快乐方式。不过,这会让您在未来感到头疼,因此现在可能是开始更多地了解软件架构的好时机,尤其是关注点分离的概念。

于 2013-08-13T14:09:58.780 回答