我是一名学生,我对良好的编程实践知之甚少,我有一个Visual Basic窗体,其中有一个DataGirdView,当你点击其中一列时,它应该打开另一个窗体(ventanaMod),让你编辑特定行的数据。
我已经设法让程序做我想用这段代码。
Private Sub dgvNotas_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvNotas.CellDoubleClick
Dim selectedRow As DataRow
selectedRow = dgvNotas.DataSource.Rows(e.RowIndex)
Dim ventanaMod As New Modificar(selectedRow, Me)
Me.Hide()
ventanaMod.Show()
End Sub
我希望它隐藏而不关闭,它的行为方式我希望它,但为了再次打开它,我需要存储另一个窗体作为变量(ventanaOrig)
Dim ventanaOrig As Form1
Public Sub New(registro As DataRow, pventanaOrig As Form1)
InitializeComponent()
lblName.Text = registro("Nombre")
lblApellidos.Text = registro("Apellidos")
txtCiclo.Text = registro("Ciclo")
txtCurso.Text = registro("Curso")
txtVB.Text = registro("Nota1")
txtAndr.Text = registro("Nota2")
txtPy.Text = registro("Nota3")
txtAws.Text = registro("Nota4")
txtNav.Text = registro("Nota5")
txtWpf.Text = registro("Nota6")
txtEmpr.Text = registro("Nota7")
txtEng.Text = registro("Nota8")
TxtQV.Text = registro("Nota9")
ventanaOrig = pventanaOrig
End Sub
这意味着我在主窗体中有一个修改窗体示例,在修改窗体中有一个主窗体示例,我想知道这是否会产生任何问题,以及我可以用什么其他方法来解决这个问题。
Private Sub Modificar_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
ventanaOrig.Show()
End Sub
这也是我的代码的一部分,它使用Main窗体的示例在我关闭窗口时打开它
1条答案
按热度按时间zbdgwd5y1#
您必须了解modal dialog box and a modeless dialog box与
如果窗体打开了模式对话框,则该窗体将变为非活动状态。在继续处理窗体之前,必须填写模式对话框并将其关闭(“确定”或“取消”)。在windows标准用户界面中,窗体仍然可见,但不能变为活动状态。请注意,windows用户期望这种行为。模式对话框的常见示例是"* 文件-打开 *“对话框。
如果窗体打开一个非模式对话框,则窗体和非模式对话框都可以变为活动状态。两个窗体都可以进行编辑、移动、最小化等操作。
如果我看你想要什么,你想显示一个模态对话框。作为一个额外的,你想隐藏你的主窗体,而模态对话框是可见的。请注意,这是一个偏离标准的windows用户界面。操作员不会期望这一点,他们开始认为:嘿,我的应用程序在哪里。2如果操作员决定最小化所有窗口(如何再次显示?3),或者关闭应用程序,或者关闭窗口,你也必须解决这个问题。4我的建议是:坚持使用标准的windows用户界面。
我不确定该对话框是否仅用于向操作员显示信息,或者操作员是否需要提供在操作员指示他已完成编辑(=按下“确定”)后必须传递到主窗体的信息
我的visual basic很生疏,所以我不能给予你VB的代码。作为例子,我会给你C#代码。我相信你会得到要点。
class ExtraInformation {...//用于在窗体和模式对话框之间进行通信的属性// TODO:发明适当的类名}
如果只想显示额外信息,操作员不必在模态对话框中输入信息,请使用以下命令:
void显示额外信息(额外信息额外信息){使用(MyExtraDialogBox dlg = new MyExtraDialogBox(){ //用额外信息填充对话框:dlg.设置初始值(额外信息);
当然,您必须创建
MyExtraDialogBox.SetInitialValues
,此方法将填充所有必须显示的值。如果您想显示额外的信息,让操作员添加一些输入并使用操作员输入:
您需要一个从选定行提取ExtraInformation的过程和一个处理操作员输入的过程:
实现超出了狗屎问题的范围。
最后,单击单元格的事件处理程序非常小:
我创建了只有一个任务的小过程。这样这些过程更容易理解。它们可以很容易地进行单元测试。更容易重用它们。例如:假设您要添加一个按钮或菜单项,该按钮或菜单项对当前选定的单元格执行与双击相同的操作:
除了可重用性之外,小的更改几乎不会影响代码的其余部分。例如,如果您希望显示选定行的多一点或少一点,大多数过程不会更改