|
|
Hi,
Can you plz elaborate this concept and let me knw if there are any possible sites that will provide me with this information.
Waiting for an early response from you.
Thanks in advance,
Riz
|
|
|
|
|
|
Hi Guys,
Stupid question!
I got a collection class, Customers, that should store classes of type Customer. Simple enough task. BUT!!! for some reason after I add my first customer class to the collection class every time I instantiate a new customer class the customer that is already in the collection gets the same data as the new customer. So in the end I get a ton of classes in the collection identical to the last class added.
The customer class has a private structure to hold customer info and the add method of the collection class passes the new customer class directly into the collection.
The new method of the Customer class gets the params byval and fills the structure so i don't how the previous instances of the class already in the collection assume that they need to change.
The whole thing is done vb2005.
Any kind of light shed on the issue would be greatly appreciated
The perfect code is always in your head...it just a matter of how hard you bang your head against the wall to get it out!
|
|
|
|
|
Hard to answer without some code. Do you have some Shared fields within that customer class?
|
|
|
|
|
Hi Robert
Nope nothin is shared. All vars are private and if anything is passed to the Customer class it's byval.
Here is the Customer class:
<br />
Public Class clsSalesRecord<br />
Private Record As Object<br />
<br />
Public Sub New(ByVal SalesRecordObject As Object)<br />
Record = SalesRecordObject<br />
End Sub<br />
<br />
Public ReadOnly Property Reference() As String<br />
Get<br />
Return Record.id<br />
End Get<br />
End Property<br />
End Class<br />
Here is the collection class:
<br />
Public Class clsSalesRecords<br />
<br />
private _Records As Generic.List(Of clsSalesRecord)<br />
<br />
Public Sub Refresh(byval Record as object)<br />
_Records.Add(New clsSalesRecord(Record))<br />
End Sub<br />
HELP!!!
The perfect code is always in your head...it just a matter of how hard you bang your head against the wall to get it out!
|
|
|
|
|
Are you always passing the same Record object into the Refresh sub? If yes then surely all your customers will point to the same reference...
|
|
|
|
|
I appreciate the vote of confidence!
No!!!
Thats the thing, when the first class is added to the colection it has it's set of values. Then when i instantiate a fresh Customer class with a new record object and even before the new customer class is added to the collection the class already in the collection changes it's values to those of the fresh Customer. (My bad! I don't think I made this clear before )
So it seems as if the collection is holding onto a ref of the customer class. This in turn is strange as you can see that Customer classes are passed byval into the collection.
Class params passed byval should preserve the structure of the reference class but not be references themselves....No?
Thanks for givin me hope
The perfect code is always in your head...it just a matter of how hard you bang your head against the wall to get it out!
|
|
|
|
|
I was wondering what DB are you using? I might be able to give you an alternate way of looking at this if I knew...
Michael
|
|
|
|
|
Hi Michael
I'm using Access but I don't store this type of info in it anyway. Basically my app is an add-on extending an accounting software with its own proprietary db.
My app is using a separate db to store some info and i don't need to keep the customers etc. on my side.
Hence these classes are written as wrappers for a very !!!UGLY!!! sdk class library supplied with the software.
And at this point it's a matter of principle for me to understand why this issue arises with collections of classes in .net.
If anyone could throw my way some code with a class collection I would greatly appreciate it.
I just want to know what I’m doing wrong.
Thanks in advance
The perfect code is always in your head...it just a matter of how hard you bang your head against the wall to get it out!
|
|
|
|
|
Ok Im Looking Through and trying to find where you call your refresh...
It seems to me that its passing the New Customer in Correctly... but the Refresh refreshes all of the info in the list to the newly saved customer... Tell me what you think while I try and write this ...
I use Stored procs for all of my database access so this is new to me as well.. so go easy on me but, i will give this an attempt and if anything everyone else will eb able to correct me and give you more insight.
Michael
|
|
|
|
|
Hey there.
Don't kill me but...
I'm not that familiar with the list...of collection. If ever I need to do this kind of thing I just use a Collection variable. The only thing I can see is that the call to Sub New in you Refresh is comehow calling across all your clsSalesrecords held in mem. Sounds insane. Anywho, is there a need to use the List type? just slap 'em all into a simple collection, and see if that makes a difference. If so, at least you'll know exactly where it's happening, though why is beyond me.
|
|
|
|
|
What you have should work with the exception that _Records never gets created.
<br />
private _Records As Generic.List(Of clsSalesRecord)<br />
should be
<br />
private _Records As New Generic.List(Of clsSalesRecord)<br />
Where is the code that is calling the Refresh method?
Mike Lasseter
-- modified at 17:29 Friday 21st July, 2006
|
|
|
|
|
Hi Guys,
First off all, thanks for all the replies.
Like i said before the sdk is UUUGLY! so the refresh method would make no sense to you guys anyway without the supporting docs. In short all it does is assign Nothing to the Customer class and loop through something that was meant to be a collection in the SDK classes etc.
In any case you're fixating on the wrong thing. The collection either way i declare it generates the exact same issue. I even tried this with a structure called Customer instead of a class and the structure would have a private var to store stuff. The exact same ..it happenz!
As Michael said i pass the Customer in correctly, the collection, God love it!, is properly initialized and gets its first element fine. BUT the moment i Nothing the Customer class instance that was passed BYVAL to the frigin collection, the instance of the class in the collection gets Nothinged as well.
HOW THE ... ... .... ......... IS THAT POSSIBLE?????????????
The instance that gets Nothing is outside the scope of the sub or the collection class, and even if it wasn't it's passed BYVAL for crying out loud.
That’s my current concern!
I really appreciate your assistance but I will havta end my life now...probably very violently!
The perfect code is always in your head...it just a matter of how hard you bang your head against the wall to get it out!
|
|
|
|
|
I don't think you understand how ByVal works when using objects/classes.
For objects (that is, reference types) ByVal means that the function being
called cannot overwrite the *reference* to the object instance which is
actually passed in the parameter variable. But it does not prevent the
callee to alter properties on the instance.
ByRef, on the other hand, enables the callee to overwrite the reference
itself and therefore substitute the original object instance with another
one.
Mike Lasseter
-- modified at 8:30 Monday 24th July, 2006
|
|
|
|
|
Hi Friends,
I am creating an application in vb.net which will be download all files of latest date from FTP server.
I have found all files from FTP server through my code.But I do not understand how to download files from FTP Server to client location.
If any one can help me that will be really appreciate.
It's very urgent.
Regards & Thanks
Sunil
|
|
|
|
|
|
Hi,
Thanks for help but perhaps I forgot to mention that I have .NET 1.1
which don't support some properties which are in 2.0.So,can you suggest me any solution for .NET 1.1 ?I really appreciate your help.
Regards & Thanks
Sunil
|
|
|
|
|
Hi all,
I have a ListView control on a VS2003 WinForm which I am populating successfully with JPEG images using the LargeIcon setting. This works fine so I added code to handle the SelectedIndexChanged event so when the user clicks on one the icons (ie: the images displayed as thumbnails) the full image will appear in another tab. (The ListView MultiSelect property is turned off BTW)
Ok, so this works perfectly the FIRST time... but when I try to select any image after that I get this error (marked in the code below where it occurs):
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in system.windows.forms.dll
My event handler is below - anyone know what the heck is going wrong here?!!? My listview still seems to have all it's items and the correct indexes as well so I'm simply stumped as to what's going on.
Mike
PS: I'll google as well but I have a big deadline so any help will be appreciated!
Private Sub lvwImages_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvwImages.SelectedIndexChanged
Dim ndx As Integer = lvwImages.SelectedItems(0).Index 'CODE FALLS OVER HERE!!!!
Dim strImagePath As String = lvwImages.Items(ndx).SubItems(0).Text 'The image filename
Dim img As Image = Image.FromFile(strImagePath)
'picFullImage is a Picturebox control on another tab.
picFullImage.Width = img.Width
picFullImage.Height = img.Height
picFullImage.Image = img
End Sub
-- modified at 5:31 Friday 21st July, 2006
|
|
|
|
|
Try using the FocusedItem property of the ListView.
from memory, try something like this
you have
nzmike wrote: Dim ndx As Integer = lvwImages.SelectedItems(0).Index 'CODE FALLS OVER HERE!!!!
Dim strImagePath As String = lvwImages.Items(ndx).SubItems(0).Text 'The image filename
I suggest
...
Dim strImagePath As String = lvwImages.FocusedItem.SubItems(0).Text
...
Saves you having to declare the "ndx" variable as well.
I find the FocusedItem property far more useful than SelectedIndex when using a ListView.
I hope this solves your problem.
|
|
|
|
|
Thanks - hadn't used that before so it's good to know about. What I ended up doing (with my client's agreement) was making the user double-click on an image to show the image and that does work perfectly every time with the same code - I can only guess that the event handler for SelectedIndexChanged has a bug. Appreciate the input though - will use FocusedItem next time!
-- modified at 5:59 Friday 21st July, 2006
|
|
|
|
|
It's not a bug but I don't have a valid technical explanation for it. I think (i stand under correction) that it has to do with the variable's scope and how it's pointed to by the CLR. Never bothered to look it up, but I know it's not a bug.
|
|
|
|
|
Its not a bug. What is actually happening is the SelectedIndexChanged event is thrown twice when a new selection is make. The Selected Index is removed from the current selection and moved to a different selection.
You could and should always check to make sure the SelectedItems Collection of the ListView has an item in it.
Mike Lasseter
|
|
|
|
|
Ok, that makes sense - I guess I didn't really think that it would get fired twice but it stands to reason I suppose since the first image is being de-selected that it would fire. I'm keeping with the double-click method now though as my client now prefers that over the single click anyway.
Cheers,
Mike
|
|
|
|
|
how can we scann the cd in VB.NET
jinal
|
|
|
|