Vb.net 对象引用未设置为对象的实例。如何删除
我在表单form2中嵌入了一个userform,出于某种原因,我开始得到以下内容。 “对象引用未设置为对象实例”仅在form2的设计模式下 如果我通过“忽略并继续”并运行该项目,则表单工作正常,不会出现问题,并且错误消息仍然存在 单击此处查看错误的屏幕截图。 这是 下面是userform load事件的代码表单,我复制了触发错误的行。如果我注释掉这行,设计错误就会消失Vb.net 对象引用未设置为对象的实例。如何删除,vb.net,Vb.net,我在表单form2中嵌入了一个userform,出于某种原因,我开始得到以下内容。 “对象引用未设置为对象实例”仅在form2的设计模式下 如果我通过“忽略并继续”并运行该项目,则表单工作正常,不会出现问题,并且错误消息仍然存在 单击此处查看错误的屏幕截图。 这是 下面是userform load事件的代码表单,我复制了触发错误的行。如果我注释掉这行,设计错误就会消失 If CType(Me.ParentForm.Owner, Form1).DataGridView1.Columns(col)
If CType(Me.ParentForm.Owner, Form1).DataGridView1.Columns(col).ReadOnly = False Then
Public Sub UserControl1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim DS As New PIMUserDBDataSet.ewosappendixDataTable
Dim col As Integer
DataGridView1.Rows.Add()
With DS
For col = 0 To .Columns.Count - 1
If CType(Me.ParentForm.Owner, Form1).DataGridView1.Columns(col).ReadOnly = False Then ComboBox1.Items.Add(DS.Columns(col).ColumnName)
End If
Next
ComboBox1.Sorted = True
End With
End Sub
任何关于如何解决这一问题的建议都将不胜感激
谢谢
下面是加载/显示表单2的事件代码,因为它将帮助您识别form2/usercontrol1的父级
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ufm As New Form2
ufm.Owner = Me
ufm.Show()
End Sub
这是我的form1.vb.design
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
公开课表格1
Public filtermanger As DgvFilterManager
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ufm As New Form2
'showing form2 which has the user control.
ufm.Owner = Me
ufm.Show()
End Sub
Private Sub DataGridView1_BindingContextChanged(sender As Object, e As EventArgs) Handles DataGridView1.BindingContextChanged
Dim filtermanger As DgvFilterManager
Dim idx As Integer
filtermanger = New DgvFilterManager(DataGridView1)
DataGridView1.GetType.InvokeMember("DoubleBuffered", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.SetProperty, Nothing, DataGridView1, New Object() {True})
With DataGridView1
.EnableHeadersVisualStyles = False
For Each col In DataGridView1.Columns
'format (highlight) editable columns
Select Case col.datapropertyname
Case "execsummary", "custliab_1", "reqvendreturn_5", "pimvendreturn_6", "pmvendreturnesc_7", "bpsvertical"
idx = col.index
.Columns(idx).HeaderCell.Style.BackColor = Color.Wheat
.Columns(idx).HeaderCell.Style.Font = New Font(DataGridView1.Font, FontStyle.Bold)
If col.datapropertyname = "custliab_1" Then
.Columns(idx).ToolTipText = "Valid Values (uppercase):" _
& vbCrLf & "C : Customer Liable" _
& vbCrLf & "V : Vendor Liable(Returnable)" _
& vbCrLf & "R : Customer commitment but no Liability" _
& vbCrLf & "S : KGP Is Stuck With it As customer Is Not Liable. Cannot Return To vendor, but customer contract requires KGP to keep on hand." _
& vbCrLf & "N : Not Liable (Customer Or Vendor)" _
& vbCrLf & "Blank"
End If
End Select
Next
End With
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dc As DataColumn
Dim idx As Integer
Dim user As Integer
'Form3 is the initial form the user see's. they click one of two buttons.
user = Form3.user
For Each col In Me.PIMUserDBDataSet.ewosappendix.Columns
Select Case user
Case 1 'EWOS User
dc = col
idx = col.ordinal
Select Case dc.ColumnName
Case "execsummary", "custliab_1", "reqvendreturn_5", "pimvendreturn_6", "pmvendreturnesc_7", "bpsvertical"
dc.ReadOnly = False
DataGridView1.Columns(idx).ReadOnly = False
Case Else
dc.ReadOnly = True
DataGridView1.Columns(idx).ReadOnly = True
End Select
Case 2 'Inv Anaylyst
dc = col
idx = col.ordinal
Select Case dc.ColumnName
Case "reqvendreturn_5", "pimvendreturn_6", "pmvendreturnesc_7"
dc.ReadOnly = False
DataGridView1.Columns(idx).ReadOnly = False
Case Else
dc.ReadOnly = True
DataGridView1.Columns(idx).ReadOnly = True
'dcdt.ReadOnly = True
End Select
Case 3
dc = col
idx = col.ordinal
Select Case dc.ColumnName
Case "execsummary", "custliab_1", "reqvendreturn_5", "pimvendreturn_6", "pmvendreturnesc_7", "bpsvertical", " ExecReview", "inventoryanalyst" &
",EWOSClass", "custliab_1", "worker", "prodmgr", "owncode", "executive", "finalown"
dc.ReadOnly = False
DataGridView1.Columns(idx).ReadOnly = False
Case Else
dc.ReadOnly = True
DataGridView1.Columns(idx).ReadOnly = True
'dcdt.ReadOnly = True
End Select
End Select
Next
Me.EwosappendixTableAdapter.Fill(Me.PIMUserDBDataSet.ewosappendix)
End Sub
这里是Form2.vb.design
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
由于控件通过Form2的Owner属性引用Form1,因此需要在初始值设定项运行之前设置它 对Form2的新方法进行如下扩充
Public Sub New(myOwner As Form1)
Owner = myOwner
' This call is required by the designer.
InitializeComponent()
End Sub
If me.parentform.owner IsNot Nothing then
With DS
For col = 0 To .Columns.Count - 1
If CType(Me.ParentForm.Owner, Form1).DataGridView1.Columns(col).ReadOnly = False Then
ComboBox1.Items.Add(DS.Columns(col).ColumnName)
End If
Next
ComboBox1.Sorted = True
End With
End If
那就这样说吧
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ufm As New Form2(Me)
ufm.Show()
End Sub
我会将您的usercontrol更改为IDE中的安全控件,如下所示
Public Sub New(myOwner As Form1)
Owner = myOwner
' This call is required by the designer.
InitializeComponent()
End Sub
If me.parentform.owner IsNot Nothing then
With DS
For col = 0 To .Columns.Count - 1
If CType(Me.ParentForm.Owner, Form1).DataGridView1.Columns(col).ReadOnly = False Then
ComboBox1.Items.Add(DS.Columns(col).ColumnName)
End If
Next
ComboBox1.Sorted = True
End With
End If
当您在vs设计模式下打开用户控件时,会触发用户控件的加载事件,您可以添加一个检查条件,以便在它不在设计时加载,如:
bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
UserControl1
构造函数中发生了什么?你知道如何读取堆栈吗?用户控制代码的第21行是什么?根据我在InitializeComponent子表单2部分发布的代码。Me.Controls.Add(Me.UserControl11)需要更多信息。DataGridView1控件在usercontrol1或Form1中,还是两者都在?表单2是否具有用户控件UserControl1?我不清楚Form2或Usercotrol1的设计是否有问题?请评论该行并拍摄快照。同时检查UserControl1.Designer.vb的第21行。要使其可见,请在解决方案资源管理器中选择“全部显示”工具栏图标。不要忘记接受答案。谢谢,欢迎光临。