Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Public forced to Protected ... How to stop?

Posted on 2006-07-03
9
Medium Priority
?
252 Views
Last Modified: 2010-04-16
I have a C# webform in Visual Studio 2003 with the following ...

protected System.Web.UI.WebControls.HyperLink HyperLink1;
protected System.Web.UI.WebControls.Label lblInfo;
protected System.Web.UI.WebControls.Label lblName;

I manually change it to ...

public System.Web.UI.WebControls.HyperLink HyperLink1;
public System.Web.UI.WebControls.Label lblInfo;
public System.Web.UI.WebControls.Label lblName;

works fine for awhile ... then KAPUT! VS IDE forces it back to ...

protected System.Web.UI.WebControls.HyperLink HyperLink1;
protected System.Web.UI.WebControls.Label lblInfo;
protected System.Web.UI.WebControls.Label lblName;

WTF?
How to stop VS IDE from changing PUBLIC back to PROTECTED?
0
Comment
Question by:volking
  • 3
  • 3
  • 2
  • +1
9 Comments
 
LVL 9

Expert Comment

by:WinterMuteUK
ID: 17031592
You can't stop the IDE from doing that (that I'm aware of).

The only solution would be to maybe encapsulate your controls as properties if you really want them to be public...

Wint.
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 17031641
Can't remember if this is the same for 2003 or not but highlight the control in the designer and open its properties window and see if there is a property called "Modifier".
0
 
LVL 12

Expert Comment

by:gbzhhu
ID: 17031708
This happened to a colleague of mine before.  After a good discussion we agreed that it was bad practice to put public fields/controls in general and that VS actions was actually justified.  Can you think of a time when you MUST have a public field/control if it is yes then perhaps your objects are not designed correctly.  Don't take this as a criticism please.  It is my experience but then I am not that experienced
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 5

Author Comment

by:volking
ID: 17031715
@carl_tawn - no "modifier" just "EnableViewState" and "Visible"
0
 
LVL 9

Expert Comment

by:WinterMuteUK
ID: 17031733
I agree with gbzhhu, public modifiers on labels etc should be avoided if possible, the advantage of using properties is that you can provide just a getter which is at least a little bit safer than a full blown public field.

Wint.
0
 
LVL 5

Author Comment

by:volking
ID: 17031769
Maybe I'm doing it ALL WRONG ...

I change declares to public so that, from the form hosting the control, I can set values within the control. Like this ...

The control is:  MyMenu.ascx
The control contains a label: lblInfo

The control has been dropped onto:  MyForm.aspx

In MyForm.aspx codebehind I can simply say:   this.MyMenu1.MyLabel.Text = "Whatever";

Works fine if lblInfo has been declared public ...

Am I doing it wrong? How should I set control values from the host form?

0
 
LVL 12

Assisted Solution

by:gbzhhu
gbzhhu earned 800 total points
ID: 17031852
You should declare lblInfo as private (or protected if you need access to it project wide) then in MyMenu.ascx add a public property that will return lblInfo  or even just string (for get) and sets the lblInfo.text (for set)

I believe this is the OO way.  
0
 
LVL 9

Accepted Solution

by:
WinterMuteUK earned 1200 total points
ID: 17031879
Yes, the lbl would be declared as:

 protected Label lblInfo...

and a property like:

  public Label LblInfo { get { return lblInfo; } }

you'd then use it as:

   LblInfo.Text = "TEST";

What the property will stop you doing is:

  LblInfo = new Label(); //!! ERROR !!

Wint.
0
 
LVL 5

Author Comment

by:volking
ID: 17032149
Excellent!

I changed this ....

public System.Web.UI.WebControls.Label lblSchoolName;
public System.Web.UI.WebControls.HyperLink HyperLink1;

back to this ....

protected System.Web.UI.WebControls.Label lblSchoolName;
protected System.Web.UI.WebControls.HyperLink HyperLink1;

and added this ...

public System.Web.UI.WebControls.Label LblSchoolName { get { return lblSchoolName; } }
public System.Web.UI.WebControls.HyperLink hyperLink1 { get { return HyperLink1; }

Works GREAT! Thanks all!
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Hello there! As a developer I have modified and refactored the unit tests which was written by fellow developers in the past. On the course, I have gone through various misconceptions and technical challenges when it comes to implementation. I would…
this video summaries big data hadoop online training demo (http://onlineitguru.com/big-data-hadoop-online-training-placement.html) , and covers basics in big data hadoop .
When cloud platforms entered the scene, users and companies jumped on board to take advantage of the many benefits, like the ability to work and connect with company information from various locations. What many didn't foresee was the increased risk…

926 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question