vb.net问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net问题相关的知识,希望对你有一定的参考价值。

Me.Dispose和Me.Close和End有什么区别?哪个资源释放的更彻底?

Me.Close是关闭窗体,如果程序只有一个主窗体,就直接关闭程序了
Me.Dispose用来释放组件,通常不需要手工调用它
End是强制关闭程序,而不理程序现在的状态,只有万不得已的情况下,才使用这个命令。

正常都会调用Me.Close,然后Me.Close就会自动调用Me.Dispose。
所以Me.Close是资源释放最彻底的方式。
而End是资源释放最不彻底的方式。
参考技术A 执行 dispose 后,由.net 的GC垃圾回收器周期性地回收资源, me.close 方法的基类会调用 dispose 方法end 是从vb中继承下来的语句,直接指示退出程序.程序的资源将被释放,程序并未希望结束时,不适合使用该方法.若要强行退出应用程序,在.net中可以使用Environment.Exit(0) 下面是 system.windows.forms.form 类对 close 和 dispose 的封装:'------- ClosePublic Sub Close()
If MyBase.GetState(&H40000) Then
Throw New InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", New Object() "Close" ))
End If
If MyBase.IsHandleCreated Then
Me.closeReason = CloseReason.UserClosing
MyBase.SendMessage(&H10, 0, 0)
Else
MyBase.Dispose
End If
End Sub '------- Dispose Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
Me.CalledOnLoad = False
Me.CalledMakeVisible = False
Me.CalledCreateControl = False
If MyBase.Properties.ContainsObject(Form.PropAcceptButton) Then
MyBase.Properties.SetObject(Form.PropAcceptButton, Nothing)
End If
If MyBase.Properties.ContainsObject(Form.PropCancelButton) Then
MyBase.Properties.SetObject(Form.PropCancelButton, Nothing)
End If
If MyBase.Properties.ContainsObject(Form.PropDefaultButton) Then
MyBase.Properties.SetObject(Form.PropDefaultButton, Nothing)
End If
If MyBase.Properties.ContainsObject(Form.PropActiveMdiChild) Then
MyBase.Properties.SetObject(Form.PropActiveMdiChild, Nothing)
End If
If (Not Me.MdiWindowListStrip Is Nothing) Then
Me.MdiWindowListStrip.Dispose
Me.MdiWindowListStrip = Nothing
End If
If (Not Me.MdiControlStrip Is Nothing) Then
Me.MdiControlStrip.Dispose
Me.MdiControlStrip = Nothing
End If
If (Not Me.MainMenuStrip Is Nothing) Then
Me.MainMenuStrip = Nothing
End If
Dim form As Form = DirectCast(MyBase.Properties.GetObject(Form.PropOwner), Form)
If (Not form Is Nothing) Then
form.RemoveOwnedForm(Me)
MyBase.Properties.SetObject(Form.PropOwner, Nothing)
End If
Dim formArray As Form() = DirectCast(MyBase.Properties.GetObject(Form.PropOwnedForms), Form())
Dim i As Integer = (MyBase.Properties.GetInteger(Form.PropOwnedFormsCount) - 1)
Do While (i >= 0)
If (Not formArray(i) Is Nothing) Then
formArray(i).Dispose
End If
i -= 1
Loop
If (Not Me.smallIcon Is Nothing) Then
Me.smallIcon.Dispose
Me.smallIcon = Nothing
End If
Me.ResetSecurityTip(False)
MyBase.Dispose(disposing)
Me.ctlClient = Nothing
Dim menu As MainMenu = Me.Menu
If ((Not menu Is Nothing) AndAlso (menu.ownerForm Is Me)) Then
menu.Dispose
MyBase.Properties.SetObject(Form.PropMainMenu, Nothing)
End If
If (Not MyBase.Properties.GetObject(Form.PropCurMenu) Is Nothing) Then
MyBase.Properties.SetObject(Form.PropCurMenu, Nothing)
End If
Me.MenuChanged(0, Nothing)
Dim menu2 As MainMenu = DirectCast(MyBase.Properties.GetObject(Form.PropDummyMenu), MainMenu)
If (Not menu2 Is Nothing) Then
menu2.Dispose
MyBase.Properties.SetObject(Form.PropDummyMenu, Nothing)
End If
Dim menu3 As MainMenu = DirectCast(MyBase.Properties.GetObject(Form.PropMergedMenu), MainMenu)
If (Not menu3 Is Nothing) Then
If ((menu3.ownerForm Is Me) OrElse (menu3.form Is Nothing)) Then
menu3.Dispose
End If
MyBase.Properties.SetObject(Form.PropMergedMenu, Nothing)
End If
Else
MyBase.Dispose(disposing)
End If
End Sub
参考技术B me.close 会调用窗口的close方法,在close方法中系统会自动dispose所以close在某些情况下和dispose效果一样end会使VB程序直接结束以下摘自MSDNEnd 语句可以放在过程中的任何位置,以强制整个应用程序停止运行。End 关闭通过 Open 语句打开的所有文件,并清除应用程序的所有变量。只要其他程序没有引用应用程序的对象并且应用程序的代码当前都未运行,该应用程序就会立即关闭。注意End 语句会断然停止代码的执行,而不调用 Dispose、Finalize 方法或任何其他 Visual Basic 代码。这将使其他程序所持有的对象引用无效。如果在 Try 或 Catch 块中遇到 End 语句,控制不会传递到对应的 Finally 块。Stop 语句中止执行,但与 End 不同,它不关闭任何文件或清除任何变量,除非在已编译的可执行 (.exe) 文件中遇到它。由于 End 会立即终止应用程序,而不顾及任何可能已打开的资源,因此在使用该语句前,应尝试彻底关闭所有资源。例如,如果应用程序中还有打开的窗体,应该先关闭这些窗体,然后再将控制传递给 End 语句。尽量少用 End,只有在需要立即停止时才使用该语句。终止过程的正常方式(Return 语句 (Visual Basic) 和 Exit 语句 (Visual Basic))不仅彻底关闭过程,而且允许彻底关闭调用代码。例如,控制台应用程序即可直接从 Main 过程 Return。 参考技术C me.dispose这个是最彻底 释放资源 Me.Close 这个是关闭 end 只是结束 一般用在程序的语句中 如结束语句

关于VB.NET2005中dataGridView的问题

在dataGridView中双击某一行数据弹出另一个页面对这条数据进行修改,修改完毕后点保存返回原来的页面并对原来的页面进行刷新,我的问题就是,如何将修改后的数据设为选中行,并将其显示在dataGridView的第一行。那位高手会的话,帮忙指点一下,谢谢!
qs99521: 你说的我不太会弄
那不用将其显示在dataGridView的第一行,只要修改后的数据设为选中行就可以了,能不能在代码中实现?

你可以把你修改的那个在数据库中设置一个标识,用这个标识来显示数据库中的顺序信息,当你修改后你,你修改的标识设置为0,并排序显示,就显示在第一行了。你同时也把数据库其他的标识改为1.这样,只要你修改你的信息就在第一行了。记得要重新绑定数据,

要是在程序中实现估计不能,因为数据的排序应经固定了。你修改了也无法改变他的序列啊。重新帮依然是不变的
参考技术A 数据库增加日期字段,修改时更新该字段,排序时按该字段倒序。

以上是关于vb.net问题的主要内容,如果未能解决你的问题,请参考以下文章

vb.net问题

将 vb.net 类对象转换为 vb.net 中的 JSON 字符串

将数组从 VBA 传递到 VB.NET

vb.net注册字体问题

vbscript 和 vb.net 有啥区别?

从 vb.NET (2003) 迁移到 vb2005 都有哪些好处?