将VS 2013 VB.net用于我的ClickOnce应用程序。我有一个验证数据库功能的函数,并且guts包含在Q
中。我的Catch块的一部分如下所示:
Try Catch
我想要做的是,根据底部的两个自定义错误消息清除两个不同的字段。类似于Catch ex As Exception When Err.Number = "5"
My.Application.Log.WriteException(ex)
If My.Settings.g_blnDebugMode Then
MessageBox.Show(Err.Number & " " & ex.ToString, "Exception Error")
End If
If Err.Description.Contains("The specified table does not exist") Then
MessageBox.Show("Selected file is not a valid database.", "Exception Error")
ElseIf Err.Description.Contains("The specified password does not match the database password.") Then
MessageBox.Show("The specified password does not match the current database password.", "Exception Error")
End If
Return False
或TextBox1.Text = ""
的内容,具体取决于引发的错误(密码无效或数据库无效)。我的问题是我似乎无法直接设置它们或者在catch块中设置模块或全局变量的值。
错误是:
如果没有该类的显式实例,则无法在共享方法或共享成员初始值设定项中引用类的实例成员。
如果有可能,我该怎样解决这个问题并根据Catch块中的结果设置我的TextBox?
答案 0 :(得分:0)
通常,实现你正在尝试的方法是使用第二个catch块
Catch ex As Exception When Err.Number = ""
MessageBox.Show(ex.Message)
FlushTextBox1();
Catch ex As Exception When Err.Number = ""
MessageBox.Show(ex.Message)
FlushTextBox2();
错误很可能出现,因为try-catch块在Shared
方法中。这意味着,TextBox
的值的变化将对该类的所有实例重复。如果您希望TextBox
的行为与此类似,请将Shared
关键字添加到其自己的声明中,并将其从Sub的声明中删除。如果您根本不想要这种行为,只需删除Shared
关键字即可。有关错误的详细信息,请查看MSDN article
或者,您可以调用本地函数(如代码所示)FlushTextBox1()
来更改Sub之外的TextBox
的值。