我有一个自定义表单B
。 B
由A
创建,其B.VisibleChanged
句柄。
B
上只有一个OK和Cancel按钮,我想在OK命中时做一些逻辑。
B
的确定按钮的处理方式如下:
Me.Result = Windows.Forms.DialogResult.OK
Me.Hide()
A
中的代码已正确命中并运行,但它永远不会隐藏B
。当我检查B
上的属性值时,会显示Visible = False
。
有没有人对此问题的可能原因有任何建议?
修改
此表单是使用Show()
命令显示的,因为我稍后要求使用FlashWindow()
将表单设为flash。
答案 0 :(得分:2)
不完全确定你的问题。
如果你可以改写这个问题,有人可以解决你的问题。
答案 1 :(得分:1)
我想你想显示一个带有ok和amp;的消息框。取消按钮。而不是使用表单使用mesagebox。 例如:
DialogResult dgResult = MessageBox.Show("Click Yes or No", "Test App", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if (DialogResult.OK == dgResult)
{
//Do what you want.
}
else
{
//Do nothing.
}
如果你打算使用表格,那就去做吧。想要修改父级的表单,建议使用委托来防止表单B修改表单A的变量。
其他:(不推荐)
将表单B声明为表单A的成员变量。 当需要实例化表格B. 做B.ShowDialog(); 内部在OK&取消do this.dispose(); 当你需要表单B时再次实例化。如果你不经常打电话,重新实例化的开销不会太大。
但如果您只需要确定取消,请改用消息框。
答案 2 :(得分:1)
show / hide方法对我有用:
Public Class frmViewChild ' your form A
Private WithEvents _edit As frmEdit
“代码
Private Sub editCell()
Dim PKVal As String
Dim PKVal2 As String
Dim fieldOrdinalPos As Integer
Dim isLastField As Boolean
If _edit Is Nothing Then
_edit = New frmEdit
_edit.MdiParent = Me.MdiParent
End If
'code
_edit.init(<params>)
If Not _edit.isNothing Then
_edit.Show()
_edit.WindowState = FormWindowState.Maximized
_edit.BringToFront()
End If
End Sub
“代码
Private Sub _edit_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles _edit.VisibleChanged
If Not _edit.Visible Then
WindowState = FormWindowState.Maximized ' revert after closing edit form
End If
End Sub
Public Class frmEdit ' your form B
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
Dim ret As Integer
doOK(ret)
If ret > -1 Then ' no error
Me.Hide() ' close form, but didn't cancel
End If
End Sub
HTH