user153923
user153923

Reputation:

variable is not declared it may be inaccessible due to its protection level

My VB skills are not the best, and this problem has had me stumped for a few days.

In the list of controls shown in Visual Studio that are not defined in the code behind, I can "mouseover" them and the tooltip text pops right up.

popup

errors

screenshot

Similar questions:

This one had no solution - 'var_name'is not declared. It may be inaccessible due to its protection level.' in debug mode

This one said the solution was in the web.config, but I don't understand where/how - BC30451: 'MailValidation' is not declared. It may be inaccessible due to its protection level

This one was a misspelled word - vb.net error: inaccessible due to its protection level

Update - Here is another problem that might be a clue to what my problems are:

In my Tools.vb module, I have a class to access LDAP.

The namespace for the tools class is given in the login.aspx.vb code, yet login code does not recognize the tools class.

missing tools

Upvotes: 14

Views: 168133

Answers (8)

gharel
gharel

Reputation: 573

Im my case the error was produced because an assembly used by several other assemblies was at .NET 4.5 instead of .NET 4.7, probably in the GAC. There was as version miss match in the global reference tree of my solution.

I included the source code of the assembly in error, modified its version to .NET 4.7 and made sure all other assemblies in my solution pointed toward this verstion. I also "neutralized" the one in the GAC, by renaming it with an underscore as the first letter.

Upvotes: 0

DeveloperDan
DeveloperDan

Reputation: 4684

This error occurred for me when I mistakenly added a comment following a line continuation character in VB.Net. I removed the comment and the problem went away.

Upvotes: 1

Bob Kiefer
Bob Kiefer

Reputation: 11

I have found that you have to comment out the namespace wrapping the the class at time when moving between version of Visual Studio:

'Namespace FormsAuth

'End Namespace

and at other times, I have to uncomment the namespace.

This happened to me several times when other developers edited the same solution using a different version of VS and/or I moved (copied) the solution to another location

Upvotes: 1

Joseph Mawer
Joseph Mawer

Reputation: 298

I had a similar issue to this. I solved it by making all the projects within my solution target the same .NET Framework 4 Client Profile and then rebuilding the entire solution.

Upvotes: 2

Tom McDonald
Tom McDonald

Reputation: 1902

I got this error briefly after renaming the App_Code folder. Actually, I accidentally dragged the whole folder to the App_data folder. VS 2015 didn't complain it was difficult to spot what had gone wrong.

Upvotes: 1

Javier
Javier

Reputation: 51

I have suffered a similar problem, with a Sub not accessible in runtime, but absolutely legal in editor. It was solved by changing destination Framework from 4.5.1 to 4.5. It seems that my IIS only had 4.5 version.

:)

Upvotes: 5

Casey Crookston
Casey Crookston

Reputation: 13955

Pay close attention to the first part of the error: "variable is not declared"

Ignore the second part: "it may be inaccessible due to its protection level". It's a red herring.

Some questions... (the answers might be in that image you posted, but I can't seem to make it larger and my eyes don't read that small of print... Any chance you can post the code in a way these older eyes can read it? Makes it hard to know the total picture. In particular I am suspicious of your Page directives.)

We know that 1stReasonTypes is a listbox, but for some reason it seems like we don't know WHICH listbox. This is why I want to see your page directives.

But also, how are you calling the private method FormRefresh()? It's not an event handler, which makes me wonder if you are trying to reference a listbox in a form that is not handled properly in this code behind.

You may need to find the control 1stReasonTypes. Try maybe putting your listbox inside something like

<div id="MyFormDiv" runat="server">.....</div>

then in FormRefresh(), do a...

Dim 1stReasonTypesNew As listbox = MyFormDiv.FindControl("1stReasonTypes")

Or use an existing control, object, or page instead of a div. More info on FindControl: http://msdn.microsoft.com/en-us/library/486wc64h(v=vs.110).aspx

But no matter how you slice it, there is something funky going here such that 1stReasonTypes doesn't know which exact listbox it's supposed to be.

Upvotes: 6

Trevor
Trevor

Reputation: 8004

If I remember correctly, this is the default property for controls.

Can you try by going into Design-View for the admin_reasons that contains the specified Control, then changing the control's Modifiers property to Public or Internal.

Upvotes: 3

Related Questions