|
Probably a simple question but i have a class called LukeClass.
I have a Shared variable called LukeSharedVar in that class.
I do not create any instances of that class, but i call LukeClass.LukeSharedVar = "Luke"
Does a new instance get created? I dont understand what happens if you modify a shared property/variable of a class without having any instances of that class in memory...
|
|
|
|
|
No, setting the value of a static (shared in VB) member does not create an instance of the class.
The static members are stored in the memory area for the class. This memory area is allocated when the assembly is loaded. There is only set of the static members for a class, regardless if there are zero or a million instances of the class.
---
b { font-weight: normal; }
|
|
|
|
|
Excellent thanks for that.
|
|
|
|
|
Just to add to what's been said - a shared variable ( static in C# and C++ ) has the same value for all instances of the class, and if the variable is public, you can set it even if no instances exist ( although the existance of a public static variable is a bit of a red flag, what's it used for ? )
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|
Well in my case, i have a class which contains information about a booking. I create multiple instances of this class (for multiple bookings) and store them in an array and i then pass that array to another section of my code which goes through and processes each booking in the array.
Each booking (instance of my booking class) has a peice of information which is the same across all bookings i.e. it does not booking-specific information. So i create a shared variable which stores the non booking-specific information for my processing function to use.
Doing it this way seems nicer to me than settings the same value for each booking instance.
|
|
|
|
|
I'd have tended towards having a struct which contains a list of booking info and a single ID, or passing the ID and array to a method that stores them. What if you have more than one instance of the class ( it should probably be a struct, as well ) that relate to different bookings ?
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|
I could do that but it would be messier given the fact that everything i need is stored inside the array of bookinginfo class instances as opposed to having to pass extra parameters to other functions... It would require more coding and extra copies of the non booking-specific information lying around.
Im not sure i understand exactly what you're saying though... How would a structure be better?
|
|
|
|
|
It's often more work to get the design 'right', but it saves you in the long run. If you ever need to have more than one booking in memory, your current design makes this impossible. A struct that contains an ID and a list of bookinginfo objects seems the best alternative to me.
A struct is passed by value, a class is passed by reference. A struct is more suitable for containers of data, where there aren't many methods or complex types, just a bunch of strings/numbers/etc.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|
That is true about only having one set of bookings in memory at a time. I didnt think of that...
Ill have to do some more research on structures because i dont understand the concept of having a structure ID and how it works by value as opposed to by reference.
Thanks for the advice.
|
|
|
|
|
It's not too complex, a struct is a more lightweight object. The most significant difference is that a class is always passed by ref, so if you pass a class instance into a method, changing a property on that class changes it in the calling function as well. A struct is passed by value ( a copy is made ), so changes are not reflected in the calling object unless you specify that you wanted to pass by ref.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|
I understand. Thanks for your help.
|
|
|
|
|
Christian Graus wrote: ( static in C# and C++ )
and C and Java and Pascal and...
---
b { font-weight: normal; }
|
|
|
|
|
Hi, does anyone know what this error means and how I can resolve the issue? I have created a UFL for crystal reports in VS2005 and have created the assembly etc. It works fine in preview report, but when I load the program and try to load the report from the viewer it gives me the error:
"NonComVisibleBaseClass was detected
Message: A QueryInterface call was made requesting the default IDispatch interface of COM visible managed class 'CRUFL_VB_ReportFunctions.CrystalReport1'. However since this class does not have an explicit default interface and derives from non COM visible class 'CrystalDecisions.CrystalReports.Engine.ReportClass', the QueryInterface call will fail. This is done to prevent the non COM visible base class from being constrained by the COM versioning rules."
I have done some research online to find that the problem might be the MDA, I added the MDA key as described and set it to 0 but am still having problems with mda issues during the build and run within visual studio. Runs fine if I use the exe in the bin folder.
Any ideas? thank you
eatwork
|
|
|
|
|
Hi,
The code below should use the adodc control to retrieve data from the table and display them in textboxes.
In the contrary this error:object does not support named arguments was returned on
rctcon.recordsource= "select * from mytable" section of my code.
Dim rctcon as connection<br />
rctcon.connectionstring=MYstring<br />
rctcon.recordsource= "select * from mylist"<br />
set txtpolicy.datasource= rctcon<br />
txtpolicy.datafield="policyno"
Please how am I to use the adodc to display data in my textboxes.
thanks
Fikunmi Feyijin
Hicad Systems
Nigeria
|
|
|
|
|
Are you really sure that the code that produces that error message looks like that? It doesn't really make any sense, as you are not using any named arguments in the query.
---
b { font-weight: normal; }
|
|
|
|
|
hi there,
i`m really new to .Net and need help with a problem.
i have to send commands to the serial port to which a rfid-card-reader is connected. depending on the command, the card-reader send the answer back to the serial port. my problem is that the first 3 or sometimes 4 commands are working but the following end up in incorrect answers.
the problem has to stuck somewhere in my program because the reader is working fine with another program and the commands are correct.
the connection i build up with the following code
<br />
Private Sub connection()<br />
<br />
mySerial = New SerialPort("COM9", 9600, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)<br />
mySerial.Encoding = System.Text.Encoding.GetEncoding(1252)<br />
mySerial.Open()<br />
<br />
End Sub
in my main program i write the command in an byte array.
example:
<br />
Dim buffer1 As Byte() = {&H2, &HB0, &HB2}<br />
sending(buffer1)
before i use the function sending to send the bytes to the serial port
<br />
Private Sub sending(ByVal buffer As Byte())<br />
<br />
Dim i As Integer<br />
<br />
Dim count = buffer(0) 'buffer(0) includes the number of the following bytes<br />
<br />
'Here i want to write byte by byte to the com port<br />
<br />
For i = 0 To count <br />
mySerial.Write(Chr(buffer(i)))<br />
Next<br />
<br />
End Sub
after this i use a threading.thread.sleep() in my main program before i use the following function to read from the com-port
<br />
Private Function reading() As Byte()<br />
<br />
Dim readbuffer As Byte() = {}<br />
<br />
'setting the readbuffer to the size of bytes it has to read from the port<br />
<br />
ReDim readbuffer(mySerial.BytesToRead() - 1) <br />
<br />
'read bytes from the serial port<br />
<br />
mySerial.Read(readbuffer, 0, mySerial.BytesToRead) <br />
<br />
reading = readbuffer<br />
<br />
End Function
As i said the first read / write attemps work fine but after a few times i get wrong answers but the command is definitly correct.
is there something i make wrong while opening the connection or do i have to send the bytes an other way?
thanks for your help
michael
|
|
|
|
|
belowzero wrote: mySerial = New SerialPort("COM9", 9600, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
First, verify that these parameters are correct. Compare them with the parameters the your other application is using.
belowzero wrote: mySerial.Encoding = System.Text.Encoding.GetEncoding(1252)
Why are you setting an encoding if your supplying the bytes to be sent out the port? The encoding will translate any text characters, thereby possibly screwing up your data as it goes out to and comes back from the RFID reader. Leave it at the default of ASCII.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
hi, thanks for your answer.
the parameters i got from one of our engineers so i think they are ok.
the encoding setting i also became from him, but i`ll try it without the encoding tomorrow.
i first wanted to try the programm tonight at home but unfortunately i forgot that my notebook has no serial port is there any way to simulate a serial port?
thanks michael
|
|
|
|
|
belowzero wrote: the parameters i got from one of our engineers so i think they are ok.
The first rule of troubleshooting: There is no "thinking" allowed. You either know it or you don't. You either know you've tested and verified it, or you need to test and verify it.
belowzero wrote: is there any way to simulate a serial port?
Uh, without on ACTUAL serial port, how are you going to connect the RFID reader?
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
at work i have a serial port only @home i don`t have one.
|
|
|
|
|
i found the problem. the timeout of the card reader was set to 40ms. i don`t know why, but the communication between my .net program, the serial port and the card reader needed a higher timeout.
|
|
|
|
|
Hi, I'm writing an application and I'm attempting to create a TableLayoutPanel and add/remove columns dynamically. However, I can't locate the method/ability to do so.
Is it possible to add columns to a TableLayoutPanel dynamically? If so, could you provide a small snippet?
Thanks!
|
|
|
|
|
Yeah, all you need to do is change the ColumnCount and RowCount properties. Also, check the documentation on the GrowStyle property to control automatic row or column add/delete. Once that's set, you'll have to create new ColumnStyles and/or RowStyles to define the column/row layouts and add them to the ColumnStyles and RowStyles collections.
TLP1.ColumnCount = 1
TLP1.ColumnStyles.Add(New ColumnStyle(SizeType.Percent, 100.0))
TLP1.RowCount = 2
TLP1.RowStyles.Add(New RowStyle(SizeType.Percent, 15.0))
TLP1.RowStyles.Add(New RowStyle(SizeType.Percent, 85.0))
When that's done, you can add controls to the new rows and columns with the TLP's Controls collection. You need to specify which column and row the control is going to end up in (0 based!) So, in the above example, the first (and only) column is 0, and the rows are 0 and 1.
TLP1.Controls.Add(TextBox1, 0, 0)
TLP1.Controls.Add(TextBox2, 0, 1)
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Thank you so much! That worked like a charm!
|
|
|
|
|
I have a few questions about the .NET Delegate. It seems like the delegate is consumed to change a value on the delegate's source form. My problem is, is that I need to change about 50 values (set them to blank). This (setting up a delegate) doesn't seem like the way to go about consuming an event that just merely changes textboxes to be blank. I don't need to return any value from form 1, but just fire the event.
Christian Graus: i've seen you reply to a few people's questions with the simple line 'use a delegate' or something to that effect. Just wondering what your take is on this situation.
Nathan Lindley
.NET Aficionado
-- modified at 11:16 Wednesday 4th October, 2006
|
|
|
|