|
Hi,
I have a collection of Structures and I need to modify these structures. Am I able to do this without first removing the structure from the collection, making the modifications and then reinserting back into the collection?
I have tried using:
Ctype(Collection.Item("Item"), StructureName).Property = Value
but I get a compile error saying that 'Expression is a value and therefore cannot be the target of an assignment'
I have also tried
Collection.Item("Item").Property = Value
but get a RTE saying that 'Late-bound assignment to a field of a value type 'Group' is not valid when 'Group' is the result of a late-bound expression' (Group is the nam,e of my structure, BTW).
I have modified objects in a collection using the Ctype method but am unable to do it with structures so currently am removing from the collection first. Any advice is appreciated. Thanks
|
|
|
|
|
Have you tried changing the structure to a Class? I have this feeling that as Structures are value types, not reference types, this isn't allowed.
Also, have you considered using something like List(Of T) to hold the items instead (assuming that's possible, of cause)? It will save you casting the values when you want to use them or using Late Binding? Also, it'll mean you won't be able to accidently add the wrong sort of item to the list, which would cause InvalidCastException with code like this. Of cause, if you've considered this, feel free to completly ignore me
|
|
|
|
|
Thanks for your reply.
I didn't want to classes because it seemed to be overkill considering my structures only contain 3 maybe 4 properties. So I thought structures would be more appropriate.
But no, I haven't considered using List(Of T). I'm fairly new to software development and am still finding my feet with VB.NET so was unaware of List(Of T). Thanks for the suggestion, I will give it a try and let you know the outcome
|
|
|
|
|
You could try storing one-element arrays of the structure in the collection. Although "behind the scenes" each things in the collection would be a class rather than a structure (thus adding some slight extra overhead) you would be able to store them by value elsewhere if you wished.
It might also be helpful to create a generic wrapper:
Class simpleWrap(Of T)
Public dat As T
End Class
If you did that, you could store items of type SimpleWrap(of YourStructure) in the collection. I believe that when using generic classes and methods with value type arguments, all code associated with the the classes and methods will be duplicated for each different value type, but in this scenario that shouldn't be a problem since the class has no methods and thus no code.
|
|
|
|
|
Liqz wrote:
I didn't want to classes because it seemed to be overkill considering my structures only contain 3 maybe 4 properties.
As you are casting the values, I suppose that you are using an untyped collection like ArrayList? In that case, there is no benefit at all using a structure, as each structure value will be boxed inside an object in order for the collection to be able to handle it.
That also means that it's impossible to change the separate properties in place. The value has to be unboxed and copied to a variable, where you can change the property, then the value can be boxed and stored back in the collection.
Liqz wrote: So I thought structures would be more appropriate.
No, that's not a good reason to use a structure. A structure is used when you want value type semantics, but what you have clearly contains several distinct values. Usually a structure is immutable, which means that you don't change a separate property. If you want a different set of properties you create a new structure value.
In this case you should definitely use a class instead. Unless you have a specific reason to use a structure, a class should always be the first choise. A structure can be more efficitent in some cases, but then it's also harder to implement it so that it works properly.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Ah OK, thank you supercat and guffa for your advice. It's given me something to think about. Like I said, I am still learning and all of your advice is very valuable to me. Think I will go away and read up on the correct usage of structures before I continue. Thanks again
|
|
|
|
|
Tried using List(Of T) like you suggested but unfortunately I still get the same compiler error as when using a collection. But thanks anyway. I will go away and look at the other types of collections in VB.NET, but in the mean time will stick to my long winded approach!
|
|
|
|
|
I am a gray haired old fox ...... I started to learn programming using Borlands Turbo C++ 4.5 compiler...
So I know I am bit out of touch with this stuff. All I can remember is the following of the day I wrote a small trig program:
#include <conio.h> // console input output;
#include <iostream.h> // Input/Output Stream Controlling library;
#inlcude <math.h> // Basic math function library;
#include <complex.h> // Complex math formulation library;
int main () // Start of the body of the program;
{ // initial area of program script within the body of the program;
float a,b,c,d; //Float not straight integers but decimals and negatives ectra;
cout<<"Please input the Angle: ";cin>>a;
cout<<"Please Press a key to continue";getch();
cout<<"Please input Adjacent: "cin>>b;
cout<<"Please enter in Hypotenuse: ";cin>>c;
count<<"Please enter in Time in Military 100th seconds: ";cin>>d;
float e,f,g,h;
e=1/(d*3.14);
f=(b/c);
g=(1/d);
h=a*(f*g*e);
count<<your awnser is:"<<h;
}return 0 ;}
This use to work but I might have goofed it up some where.. So any volunteers to help me learn VB @008 Express Edition scripting ?
Cause I am a bit lost and need lots of help and patience
|
|
|
|
|
Teaching programming is far beyond the scope of this, or indeed any, forum. There are thousands of free tutorials on the net which will help you get started. Or, you could even purchase a beginners book. If you then have any specific problems or queries while you are learning, post here and I'm sure someone will be able to help you.
|
|
|
|
|
That's not VB at all, but in comparison to C++ you're in for a much easier time. VB.Net is very simplistic, and unlike C++ it is not archaic or complex (to a certain degree) at all. Infact, if you picked up a book, which I hope you do, the first thing you will usually read is "VB.Net / C# is a RAD language", where RAD is Rapid Application Development. Trust me, go to a local book store, and Microsoft has a great series of books for beginners entitled
"Build a program now! using Visual Basic Express 2008" which is entirely recommended for beginners. It will get you off on the right foot about good practices and the basics of architecture. Check it out, you will have decent applications off the ground in no time.
|
|
|
|
|
hii all
how can i clear the variables?
beginner_VB_user
|
|
|
|
|
Could you be more specific?
You may use .Dispose method to delete objects.
|
|
|
|
|
im using the if...else if..else if... but the value of the variable keep adding..so i want to clear the value of the variable at every else if...
|
|
|
|
|
Set each variable you need to 0?? Without seeing your code, it's difficult to say what you're refering to.
|
|
|
|
|
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox_ByteEn.Text = "" Then
ODLAT_ARM_x_MASK_CTL = ODLAT_ARM_x_MASK_CTL And (Not (&H100000))
Else
If TextBox_ByteEn.Text = "00" Then
ODLAT_ARM_x_MASK_CTL = ODLAT_ARM_x_MASK_CTL Or ((&H100000))
ODLAT_ARM_x_REQ_B = ODLAT_ARM_x_REQ_B Or Convert.ToUInt32(TextBox_ByteEn.Text) * 32
TextBox4.Text = Hex(ODLAT_ARM_x_REQ_B)
ElseIf TextBox_ByteEn.Text = "01" Then
ODLAT_ARM_x_MASK_CTL = ODLAT_ARM_x_MASK_CTL Or ((&H100000))
ODLAT_ARM_x_REQ_B = ODLAT_ARM_x_REQ_B Or Convert.ToUInt32(TextBox_ByteEn.Text) * 64
TextBox4.Text = Hex(ODLAT_ARM_x_REQ_B)
|
|
|
|
|
Wow - that's the ugliest code I've seen for some time. If you want to reset any of these values, then write code to set their values. Duh.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
my first time using VB...
|
|
|
|
|
Is this the first time you've used ANY language (procedural)?? The rules for setting variable values apply to them all, not just VB.
|
|
|
|
|
Most likely downloaded a project and want's to edit it, never seeing a language before.
Some guy pasted: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox_ByteEn.Text = "" Then
ODLAT_ARM_x_MASK_CTL = ODLAT_ARM_x_MASK_CTL And (Not (&H100000))
Else
If TextBox_ByteEn.Text = "00" Then
ODLAT_ARM_x_MASK_CTL = ODLAT_ARM_x_MASK_CTL Or ((&H100000))
ODLAT_ARM_x_REQ_B = ODLAT_ARM_x_REQ_B Or Convert.ToUInt32(TextBox_ByteEn.Text) * 32
TextBox4.Text = Hex(ODLAT_ARM_x_REQ_B)
ElseIf TextBox_ByteEn.Text = "01" Then
ODLAT_ARM_x_MASK_CTL = ODLAT_ARM_x_MASK_CTL Or ((&H100000))
ODLAT_ARM_x_REQ_B = ODLAT_ARM_x_REQ_B Or Convert.ToUInt32(TextBox_ByteEn.Text) * 64
TextBox4.Text = Hex(ODLAT_ARM_x_REQ_B)
Just do ODLAT_ARM_x_MASK_CTL = 0, if it crashes, oh well...
|
|
|
|
|
aswd wrote: ODLAT_ARM_x_REQ_B = ODLAT_ARM_x_REQ_B Or Convert.ToUInt32(TextBox_ByteEn.Text) * 32
You know the value of TextBox_ByteEn.Text, so you don't have to parse it. It's always zero, so the entire statement is actually pointless.
If you want to set the value instead of combining it with the previous value, you just assign zero to the variable.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
I have already installed Fonts of Different Indian Languages(Hindi, Gujarati ..) .
I want to change my change Language of My Application as per Given Option(i.e. i will give option for language, if i select English then whole application will show in English , if Hindi then whole application in Hindi).
For Labels , grids.. it works fine, but problem occurring with textbox input language.
if i select 'Hindi' then 'Hindi' Text must be written in textbox.
|
|
|
|
|
If you're talking about translating words, no font is going to do this for you. You actually have to have some kind of translation software built into your app. This is not something you will find in the .NET Framework. That's IF I understand your question correctly.
|
|
|
|
|
hpcontractor wrote: f i select 'Hindi' then 'Hindi' Text must be written in textbox.
You change the font of that textbox to Hindi. If that font is installed, input characters will appear in Hindi. But your users should know the character map to enter text. Or else you need to integrate some kind of phonetic transliteration to your program.
|
|
|
|
|
N a v a n e e t h wrote: If that font is installed, input characters will appear in Hindi.
Thanks for Reply,
Hindi Font is installed, and if i select Language Hindi from 'Language Bar' , then i can write in Hindi in Textbox, but can i do same thing from code?
|
|
|
|
|
hpcontractor wrote: Hindi Font is installed, and if i select Language Hindi from 'Language Bar' , then i can write in Hindi in Textbox, but can i do same thing from code?
when you select language from 'Language Bar' then change font of text box
|
|
|
|