当我点击提交按钮时,我希望输入的数据显示在groupForm上的文本框中,但这不会发生。我必须重新启动表单或点击“刷新”按钮才能显示数据。
更新
我对这个问题进行了划分;
我必须将参数传递给表单,以便它知道要显示哪些组的数据,如此;
Dim frmReceiver As New form_addNewProfitObject
frmReceiver.setGroup(theMainGroupID, theGroupID)
frmReceiver.ShowDialog()
如果我打开这样的表格,输入的数据就会很好而不会刷新;
form_addNewProfitObject.Show()
但是这种方式表单不知道要添加数据的组。有工作吗?我也尝试frmReceiver.Show()
代替frmReceiver.ShowDialog()
,但这没有任何区别。
我不完全确定为什么我使用的方法不起作用..也许是因为点击'submit'后会调用groupForm.NewProfitObjectsItem(ByVal *snip*)
,如果创建了groupForm
,这就不起作用了使用new
?
END UPDATE
以下是点击表单一号( groupForm.vb )上的“刷新”按钮的代码。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
populate(Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID))
End Sub
这里是Submit按钮的代码,它(最后)调用完全相同的函数,但来自 form_addNewProfitObject.vb 。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim groupID As Integer = theGroupID
'New ProfitObject
ReDim Preserve Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects.Length)
Dim ProfitObjectID As Integer = Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects.Length - 2
Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID) = New ProfitObject
'Set ProfitObject properties
'Set ID
Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).id = ProfitObjectID
'Set Name
Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).name = TextBox1.Text
'Set Profit
Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).profit = TextBox2.Text
'Set TypeID
Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).typeID = TextBox3.Text
'Set Rarityd
Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).rarity = TextBox4.Text
'populate(Form1.main.Groups(groupID))
Dim textt As String = "ID" & ProfitObjectID.ToString
groupForm.NewProfitObjectsItem(textt, Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).name, Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).profit, Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).rarity, Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).typeID)
groupForm.populate(Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID))
Catch ex As Exception
MsgBox(ex.Message)
End Try
groupForm.Refresh()
Me.Close()
End Sub
我在后一个函数的末尾添加了groupForm.populate()以进行测试,但我知道这不应该是必需的(“填充”只是循环遍历ProfitObjects数组中的所有项并为每个项调用NewProfitObjectsItem)
反正;当我从第二个表单提交数据时,groupForm不会自动显示新数据。我要么必须点击刷新按钮或重新启动表单(它在表单加载时调用populate())。
我只想让新项目在提交后立即显示。它应该,因为这是groupForm.NewProfitObjectsItem()
的作用。最重要的是,我添加了groupForm.populate()
。我假设它不起作用,因为它是从外部形式调用的,或者因为另一种形式是开放的/具有焦点..任何想法?
答案 0 :(得分:2)
我不知道您的代码有什么问题。您可以使用调试器找到错误。在"提交"的第一行设置一个断点。按钮单击子例程并逐步完成该过程。可能它会帮助你弄清楚发生了什么。
我觉得可疑的一点是,ReDim
ProfitObjects
数组已经具有相同的大小。这会创建一个新数组。如果另一个表单在ReDim
with
Dim a = Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID).ProfitObjects
然后这个变量a
仍会指向旧数组ReDimmed
之前!
完全不同的东西。在评论中,有人提到你应该重构你的代码。在这个意义上我做了一些重构。这看起来不是更好吗?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim groupID As Integer = theGroupID
Dim groupObject As GroupObject = Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID)
'New ProfitObject
ReDim Preserve groupObject.ProfitObjects(groupObject.ProfitObjects.Length)
Dim ProfitObjectID As Integer = groupObject.ProfitObjects.Length - 2
Dim profit As ProfitObject = New ProfitObject()
groupObject.ProfitObjects(ProfitObjectID) = profit
'Set ProfitObject properties
profit.id = ProfitObjectID
profit.name = TextBox1.Text
profit.profit = TextBox2.Text
profit.typeID = TextBox3.Text
profit.rarity = TextBox4.Text
'populate(Form1.main.Groups(groupID))
Dim textt As String = "ID" & ProfitObjectID
groupForm.NewProfitObjectsItem(textt, profit.name, profit.profit, profit.rarity, profit.typeID)
groupForm.populate(groupObject)
Catch ex As Exception
MsgBox(ex.Message)
End Try
groupForm.Refresh()
Me.Close()
End Sub
简化NewProfitObjectsItem
的参数列表
Public Sub NewProfitObjectsItem(ByVal profit As ProfitObject)
Dim textt As String = "ID" & profit.id
'...
End Sub
然后你可以进一步简化通话
'populate(Form1.main.Groups(groupID))
groupForm.NewProfitObjectsItem(profit)
记住原文(此处附加换行符)
'populate(Form1.main.Groups(groupID))
Dim textt As String = "ID" & ProfitObjectID.ToString
groupForm.NewProfitObjectsItem(textt, Form1.main.Groups(theMainGroupID) _
.GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).name, _
Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID) _
.ProfitObjects(ProfitObjectID).profit, Form1.main.Groups(theMainGroupID) _
.GroupObjects(theGroupID).ProfitObjects(ProfitObjectID).rarity, _
Form1.main.Groups(theMainGroupID).GroupObjects(theGroupID) _
.ProfitObjects(ProfitObjectID).typeID)
还有一件事。 form.ShowDialog()
是阻止通话。这意味着在表单关闭之前代码不会继续执行!如果您同时使用多个表单,请务必使用form.Show()
。
答案 1 :(得分:1)
弄清楚导致它的原因。因为我使用New
创建&显示“groupForm
”,“form_addNewProfitObject
”在调用groupForm.NewProfitObjectsItem
时没有向正确的表单添加控件。
我必须将Public frmReceiver As New groupForm
移到CGroupMain
班级,以便form_addNewProfitObject
可以像这样访问它; Form1.main.Groups(theMainGroupID).frmReceiver.NewProfitObjectsItem
现在,在点击groupForm
时,控件已正确添加到submit
。