vb.net 无法创建窗口。A窗口创建B窗口可以,当时C窗口创建B窗口就一定报错,他们使用的语法都一样
'我试过可以,你试试
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
'******************************************
Private oOriginalRegion As Region = Nothing
' 用于窗体移动
Private bFormDragging As Boolean = False
Private oPointClicked As Point
'******************************************
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
Me.bFormDragging = True
Me.oPointClicked = New Point(e.X, e.Y)
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If Me.bFormDragging Then
Dim oMoveToPoint As Point
' 以当前鼠标位置为基础,找出目标位置
oMoveToPoint = Me.PointToScreen(New Point(e.X, e.Y))
' 根据开始位置作出调整
oMoveToPoint.Offset(Me.oPointClicked.X * -1, _
(Me.oPointClicked.Y + _
SystemInformation.CaptionHeight + _
SystemInformation.BorderSize.Height) * -1)
' 移动窗体
Me.Location = oMoveToPoint
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
Me.bFormDragging = False
End Sub
End Class
1.如果你释放的是托管托管代码的内存,那么托管代码的内存管理是自动的,.NET可以保证我们的托管程序在结束时全部释放。
2.如果是非托管资源时.NET就不能自动管理了,下面是释放非托管资源内存方法
当我们利用如数据库、文件等非托管资源时,就要用到.NET Framework中的标准: IDisposable接口。按照标准,所有有需要手动释放非托管资源的类都得实现此接口。这个接口只有一个方法,Dispose(),不过有相对的 Guidelines指示如何实现此接口,在这里我向大家说一说。实现IDisposable这个接口的类需要有这样的结构:
[Visual Basic]
Public Class Base
Implements IDisposable
Public Overloads Sub Dispose() Implements IDisposable.Dispose
Me.Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overloads Overridable Sub Dispose(ByVal disposing As Boolean)
If disposing Then
' 托管类
End If
' 非托管资源释放
End Sub
Protected Overrides Sub Finalize()
Me.Dispose(False)
MyBase.Finalize()
End Sub
End Class
Public Class Derive
Inherits Base
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
' 托管类
End If
' 非托管资源释放
MyBase.Dispose(disposing)
End Sub
End Class
我们要实现Dispose方法,实现这个Dispose方法的几个准则:
它不能扔出任何错误,重复的调用也不能扔出错误。也就是说,如果我已经调用了一个对象的Dispose,当我第二次调用Dispose的时候程序不应该出错,简单地说程序在第二次调用Dispose时不会做任何事。这些可以通过一个flag或多重if判断实现。
一个对象的Dispose要做到释放这个对象的所有资源。拿一个继承类为例,继承类中用到了非托管资源所以它实现了IDisposable接口,如果继承类的基类也用到了非托管资源那么基类也得被释放,基类的资源如何在继承类中释放呢?当然是通过一个virtual/Overridable方法了,这样我们能保证每个Dispose都被调用到。这就是为什么我们的设计有一个virtual/Overridable的Dispose方法。注意我们首先要释放继承类的资源然后再释放基类的资源。
因为非托管资源一定要被保障正确释放所以我们要定义一个Finalizer来避免程序员忘了调用Dispose的情况。上面的设计就采用了这种形式。如果我们手动调用Dispose方法就没有必要再保留Finalizer了,所以在Dispose中我们用了GC.SupressFinalize 将对象从Finalizer表去掉,这样再回收时速度会更快。
那么那个disposing和"托管类"是怎么回事呢?是这样:在"托管类"中写所有你想在调用Dispose时让其处于可释放状态的托管代码。还记得我们说过我们不知道托管代码是什么时候释放的吗?在这里我们只是去掉成员对象的引用让它处于可被回收状态,并不是直接释放内存。在"托管类"中这里我们也要写上所有实现了IDisposable的成员对象,因为他们也有Dispose,所以也需要在对象的Dispose中调用他们的 Dispose,这样才能保证第二个准则。disposing是为了区分Dispose的调用方法,如果我们手动调用那么为了第二个准则"托管类"部分当然得执行,但如果是Finalizer调用的Dispose,这时候对象已经没有任何引用,也就是说对象的成员自然也就不存在了(无引用),也就没有必要执行"托管类"部分了,因为他们已经处于可被回收状态了。好了,这就是IDisposable接口的全部了。现在让我们来回想一下,以前我们可能认为有了 Dispose内存就会马上被释放,这是错误的。只有非托管内存才会被马上释放,托管内存的释放由GC管理,我们不用管。
If BladeMode.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
c::MDIParent1.flag=False
If BladeMode.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 括号少me
巨赖欣普: 猜测是你的电脑是64位,在VS选择X86即可解决.
凤山县17518953748: VB.NET创建窗体时出错,无可用源 - ?
巨赖欣普: 这应该是启动窗体前后运行的代码有错误,检查那些代码中哪些出错,设计器vb文件不能随便更改的.
凤山县17518953748: vs2015 c#/ vb.net创建web窗体程序报错;请帮忙看看什么原因 - ?
巨赖欣普: 将上面下拉框中的.NET版本选高一些的,4.5、4.6,看看可不可以.
凤山县17518953748: 求大神指点 vb.net 运行时 不显示窗体要怎么写呀? - ?
巨赖欣普: 把窗体的 Opacity 设为 0ShowInTaskbar设为 False或者不用窗体,做成控制台程序
凤山县17518953748: 在VB.NET中加载COM组件,显示创建AXhost失败是怎么回事? - ?
巨赖欣普: 打开程序文件后,在“解决方案资源管理器”中右击“解决方案”,选择重新生成解决方案.再加载
凤山县17518953748: vb无法创建窗口 System.InvalidOperationException - ?
巨赖欣普: 貌似.Net,,,,,,,,,,只有路过,,,,,,,,,,,
凤山县17518953748: VB 创建新窗口 - ?
巨赖欣普: 呵,这个很简单啊 比如说你VB里面的那个聊天窗口叫做"私聊窗口" 那么如果你想和A聊天,可以这样写 Dim A As New 私聊窗口 A.Show A.Caption = "与A私聊中" 每次运行此代码都会产生一个和私聊窗口一样的私聊窗口
凤山县17518953748: vb.net怎么创建父子窗口? - ?
巨赖欣普: sub main()dim f1 as new form,f2 as new formf2.toplevel=falsef2.parent=f1f1.showf2.showapplication.run(f1)end sub
凤山县17518953748: vb.net WebBrowser报错当前IE设置限制打开新窗口,也可能安装了某个插件 - ?
巨赖欣普: 部分代码如下:在窗口及WebBrowser创建完以后,写此代码:WebBrowser.OnNewWindow2:=IE1NewWindow2; 给主窗口创建一个方法:procedure TBrowForm.IE1NewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool); ...
凤山县17518953748: 如何创建vb.net窗体 - ?
巨赖欣普: dim 一个窗体 as new form with 一个窗体.location=....size=...'这里是设置窗体的位置等属性 end with 一个窗体.show