多个窗体拥有类似的结构和代码 应该怎样精简
发现有好几个窗体的代码结构有点类似 虽然设计界面有点不同
都有一个 btnOk 和 btnCancel 按钮 这两个按钮的事件也比较类似 只是对象不同 写法上有点类似
都有一个Datagrid控件 都有closeing事件和Load事件 写法也比较类似
只是处理的对象有点不同
打个比方 我贴两个Form
- VB.NET code
Imports System.Data.OleDbPublic Class frmSetUser Private Sub frmSetUser_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing '检查有无更改 If adminTable.Table.GetChanges IsNot Nothing Then Select Case MessageBox.Show("您已对管理员数据进行了更改,在退出前是否保存相关的修改?", "是否保存", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) Case Windows.Forms.DialogResult.Yes adminTable.Save() Case Windows.Forms.DialogResult.No adminTable.Table.RejectChanges() '撤消变更 Case Windows.Forms.DialogResult.Cancel e.Cancel = True End Select End If config.saveWindow(Me) End Sub Private Sub frmSetUser_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load config.initWindow(Me) '绑定数据 dgvAdmins.DataSource = adminTable.Table dgvAdmins.Columns(0).ReadOnly = True End Sub Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click '保存并退出 If adminTable.Table.GetChanges IsNot Nothing Then adminTable.Save() Me.Close() End Sub Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click Me.Close() End SubEnd Class
- VB.NET code
Imports System.Data.OleDbPublic Class frmSetGoodsClass Private Sub frmSetGoodsClass_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing '检查有无更改 If category.Table.GetChanges IsNot Nothing Then Select Case MessageBox.Show("您已对商品大类进行了更改,在退出前是否保存相关的修改?", "是否保存", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) Case Windows.Forms.DialogResult.Yes category.Save() Case Windows.Forms.DialogResult.No category.Table.RejectChanges() '撤消变更 Case Windows.Forms.DialogResult.Cancel e.Cancel = True End Select End If '退出时保存窗体大小 config.saveWindow(Me) End Sub Private Sub frmSetGoodsClass_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '初始化窗体尺寸 config.initWindow(Me) '绑定数据 dgvClass.DataSource = category.Table dgvClass.Columns(0).ReadOnly = True End Sub Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click '保存并退出 If category.Table.GetChanges IsNot Nothing Then category.Save() Me.Close() End Sub Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click Me.Close() End SubEnd Class
大家可以看出 这两个form 虽然设计界面有点不同 但代码结构重复的很多
其实还有好几个form的代码结构也是重复的
所以我觉得应该重构一下
但是我不知道应该怎么样弄 求大家教一下思路或给出相关重要部分代码
[解决办法]
用继承那。
将相同功能的代码写在BaseFrom里,比如你的btnOk 和 btnCancel
然后其他窗体继承BaseFrom,实现个性化的内容
宗旨就是将相同的东东放在一个父窗体里BaseFrom,其他窗体继承BaseFrom实现自己不同的东东