我正面临一个奇怪的问题,我正在尝试创建Usercontrol(Add_companies)并将其添加到面板 一切正常,但当我将连接添加到用户控件时,我遇到了这个错误:
变量'Add_companies1'要么未声明,要么从未分配过。
这是我的联系:
Protected configuracion As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("Conn")
Dim Conn As New SqlConnection(configuracion.ConnectionString)
Public Cmd As SqlCommand
当我转到代码行错误时,什么都没有。
答案 0 :(得分:1)
Protected configuracion As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("Conn")
Dim Conn As New SqlConnection(configuracion.ConnectionString)
Public Cmd As SqlCommand
您表示您已将此代码放在UserControl中,现在表单设计器正在抛出错误。当VS IDE放置在设计图面上时,VS IDE正在加载并运行usercontrol的实例。
这三行代码必须放在类级别,以支持Protected
和Public
访问修饰符。问题是设计人员无法检索ConfigurationManager.ConnectionStrings("Conn")
,因此configuracion
在Dim Conn As New SqlConnection(configuracion.ConnectionString)
中使用时为{null}。
在类级别使用语法:Dim var as New Something()
时,编译器会将其转换为Dim var as Something
并将var = New Something()
放入类构造函数(Sub New)代码中。
要解决此问题,您需要阻止在设计模式下执行时会引发错误的代码。为此,所有控件都有一个名为DesignMode
的布尔属性。请注意,如果在构造函数代码中使用DesignMode
将无效,因此尝试使用它将失败。
Imports System.Configuration
Imports System.Data.SqlClient
Public Class Add_companies
Protected configuracion As ConnectionStringSettings
Private Conn As SqlConnection
Public Cmd As SqlCommand
Private Sub Add_companies_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If Not Me.DesignMode Then
configuracion = ConfigurationManager.ConnectionStrings("Conn")
Conn = New SqlConnection(configuracion.ConnectionString)
End If
End Sub
End Class