Showing posts with label library. Show all posts
Showing posts with label library. Show all posts

Tuesday, March 13, 2012

TextBox and Property

Hello,

I am working on Library which will include various controls.

One of these controls has a TextBox.

I am using a property named Value to define the TextBox text:

' Value
Private _Value As String
Public Property Value() As String
Get
Return _Value
End Get
Set(ByVal value As String)
_Value = value
End Set
End Property ' Value

And the TextBox Init event is the following:

Private Sub tbText_Init(ByVal sender As Object, ByVal e As
EventArgs) Handles tbText.Init
tbText.ID = "tbText"
tbText.Text = _Value
End Sub

I added this control to a page and defined its value to "Hello".

I also added a button to the page that when clicked basically does
Response.Write(MyControl.Value)

What happens is that when I change the TextBox text to "Goodbye" and
click the button the text that Response.Write outputs is "Hello".

Why isn't the property returning the new value?

What is the right way to do this?

Thanks,

MiguelHowdy,

This is because you change the text of the text box in the Init event.
Button raises its Click event between Load and PreRender page's events
meaning after you take the value of the Value property. In addition, if the
value is set through the code or data binding its value will be lost because
it's not stored in the viewstate. You need to simplify your code to:

Public Property Value() As String
Get
Return tbText.Text
End Get
Set(ByVal value As String)
tbText.Text = value
End Set
End Property ' Value

Done

hope it helps
--
Milosz

"shapper" wrote:

Quote:

Originally Posted by

Hello,
>
I am working on Library which will include various controls.
>
One of these controls has a TextBox.
>
I am using a property named Value to define the TextBox text:
>
' Value
Private _Value As String
Public Property Value() As String
Get
Return _Value
End Get
Set(ByVal value As String)
_Value = value
End Set
End Property ' Value
>
And the TextBox Init event is the following:
>
Private Sub tbText_Init(ByVal sender As Object, ByVal e As
EventArgs) Handles tbText.Init
tbText.ID = "tbText"
tbText.Text = _Value
End Sub
>
I added this control to a page and defined its value to "Hello".
>
I also added a button to the page that when clicked basically does
Response.Write(MyControl.Value)
>
What happens is that when I change the TextBox text to "Goodbye" and
click the button the text that Response.Write outputs is "Hello".
>
Why isn't the property returning the new value?
>
What is the right way to do this?
>
Thanks,
>
Miguel
>

TextBox and Property

Hello,
I am working on Library which will include various controls.
One of these controls has a TextBox.
I am using a property named Value to define the TextBox text:
' Value
Private _Value As String
Public Property Value() As String
Get
Return _Value
End Get
Set(ByVal value As String)
_Value = value
End Set
End Property ' Value
And the TextBox Init event is the following:
Private Sub tbText_Init(ByVal sender As Object, ByVal e As
EventArgs) Handles tbText.Init
tbText.ID = "tbText"
tbText.Text = _Value
End Sub
I added this control to a page and defined its value to "Hello".
I also added a button to the page that when clicked basically does
Response.Write(MyControl.Value)
What happens is that when I change the TextBox text to "Goodbye" and
click the button the text that Response.Write outputs is "Hello".
Why isn't the property returning the new value?
What is the right way to do this?
Thanks,
MiguelHowdy,
This is because you change the text of the text box in the Init event.
Button raises its Click event between Load and PreRender page's events
meaning after you take the value of the Value property. In addition, if the
value is set through the code or data binding its value will be lost because
it's not stored in the viewstate. You need to simplify your code to:
Public Property Value() As String
Get
Return tbText.Text
End Get
Set(ByVal value As String)
tbText.Text = value
End Set
End Property ' Value
Done
hope it helps
--
Milosz
"shapper" wrote:

> Hello,
> I am working on Library which will include various controls.
> One of these controls has a TextBox.
> I am using a property named Value to define the TextBox text:
> ' Value
> Private _Value As String
> Public Property Value() As String
> Get
> Return _Value
> End Get
> Set(ByVal value As String)
> _Value = value
> End Set
> End Property ' Value
> And the TextBox Init event is the following:
> Private Sub tbText_Init(ByVal sender As Object, ByVal e As
> EventArgs) Handles tbText.Init
> tbText.ID = "tbText"
> tbText.Text = _Value
> End Sub
> I added this control to a page and defined its value to "Hello".
> I also added a button to the page that when clicked basically does
> Response.Write(MyControl.Value)
> What happens is that when I change the TextBox text to "Goodbye" and
> click the button the text that Response.Write outputs is "Hello".
> Why isn't the property returning the new value?
> What is the right way to do this?
> Thanks,
> Miguel
>

TextBox and Property

Hello,

I am working on Library which will include various controls.

One of these controls has a TextBox.

I am using a property named Value to define the TextBox text:

' ValuePrivate _ValueAs String Public Property Value()As String Get Return _ValueEnd Get Set(ByVal valueAs String) _Value = valueEnd Set End Property' Value

And the TextBox Init event is the following:

Private Sub tbText_Init(ByVal senderAs Object,ByVal eAs EventArgs)Handles tbText.Init tbText.ID ="tbText" tbText.Text = _ValueEnd Sub

I added this control to a page and defined its value to "Hello".

I also added a button to the page that when clicked basically does Response.Write(MyControl.Value)

What happens is that when I change the TextBox text to "Goodbye" and click the button the text that Response.Write outputs is "Hello".

Why isn't the property returning the new value?

What is the right way to do this?

Thanks,

Miguel

You have to use ViewState. means you have to save your property value in the ViewState, so that when page postbacks all the values are retrived from viewstate.

Public Property Value()As String
Get
Return ViewState["Value"]
End Get
Set(ByVal valueAs String)
ViewState["Value"] = value
End Set
End Property' Value

I hope this will resolve your problem.
Let me know in case of any further queries


So I will not need the variable _Value in this case?

And is this the only way to do this?

Thanks,

Miguel


Hello,

I also tried the following:

Private _ValueAs String Public Property Value()As String Get Return tbText.TextEnd Get Set(ByVal valueAs String) _Value = valueEnd Set End Property' Value

This works. How?

Should I use this way or the ViewState?

Thanks,

Miguel


No, you can directly save your values in ViewState.
I don't think there may be any other way, because whenever your form is posted on server all the values are stored in ViewState.

I hope it would help!


shapper:

Hello,

I also tried the following:

Private _ValueAs String Public Property Value()As String Get Return tbText.TextEnd Get Set(ByVal valueAs String) _Value = valueEnd Set End Property' Value

This works. How?

Should I use this way or the ViewState?

Thanks,

Miguel

Yes because Textbox.Text is stored in ViewState


Just one more question. When using the code you suggested:

Private _ValueAs String Public Property Value()As String Get Return ViewState("Value")End Get Set(ByVal valueAs String) ViewState("Value") = valueEnd Set End Property' Value

How should I know define the initial value of my textbox?

In this moment I have:

MyTextBox.Text = _Value

Of course I could use

MyTextBox.Text =Me.Value
However, sometime ago, also in Microsoft forum there was a thread that I started weather in the code should I use ... = Me.PropertyName or ... = _PropertyName
It seems most people use the variable _PropertyName.
How should I do it?
I suppose using  
MyTextBox.Text = ViewState("Value")
isn't a very nice way to do it.
Anyway, just looking for a standard way (or the closest to it) to do this.
Thanks,
Miguel 


Hi ,

THis problem is due to IsPostBack property. when you intially assigned the value Hello value check the property

If Not Page.IsPostBack Then

assign your assign intial value to control...

TextBox1.Text = "sample value"

End If


Public Property Value() As String
Get
Dim viewState As Object = ViewState("Value")

If viewState Is Nothing Then
' Return your default value here instead of an empty string
Return String.Empty
Else
Return CStr(viewState)
End If
End Get
Set(ByVal value As String)
ViewState["Value"] = value
End Set
End Property

NC...