|
Hi Lenus,
there is nothing wrong with your code. In struct newStruct you defined constructor with parameter that is called when you create instance of newStruct: newStruct abc = new newStruct(10);
In struct anotherStruct you also defined constructor with parameter, but this constructor is never called.
anotherStruct def; //here you create object def of type anotherStruct. no costructor is called
def.x = 250; // here you just assign value 250 to variable x, no constructor is called
def.method1(); //this writes 250 to output which is totally correct since you set x to 250 before
Compiler won't compile code if you do not set def.x.
I was probably wrong when I said there is default parameterless constructor. There is no default parameterless constructor at all and you can not declare your own.
|
|
|
|
|
Ok. Thanks for the clarification. But I think this proves there is nothing wrong declaring a value type stuct with a constructor - which obviously of no use and does nothing.
Regards,
Lenus.
|
|
|
|
|
Hi, I'm using the C# webbrowser in order to automate the navigating to a web site, the website is using widgets whichs means a terrible javascript code behind..
For example, a TR that opens a new Tab, looks like this:
"<tr role="wairole:presentation" style="display: table-row;" onmouseup="MU_function(event,this);" onmouseover="MO_function(event,this);" class="folderRow" title="Click here"></tr>"
And I want to say to C# to click this TR in order to open the tab, which means invoking the MU_function(event,this) or maybe MO_function(event,this)then MU_function(event,this).
There's a way of communication between C# and Javascript: by doing something like :
<code>MyWebBrowser.Document.InvokeScript("alert", new string[] { "Hello World" });</code>
by using System.Diagnostics namespace and doing :
[ComVisible(true)]
public partial class MainForm : Form
....
This InvokeScript can also execute a javascript function in the page, so there's a possibility to invoke the MU_function(event,this).. (event: mouseup, this: the TR tag).
Now the problem is: (event,this) have to be JavaScript objects!! How can we do this??
I was thinking for a while, I got an idea: what if we serialize the "event" which is a MouseEvent object and the "this" which is a HTMLElement, then deserializing them to 2 assembly types or whatever, in this case the code should looks like :
MyWebBrowser.Document.InvokeScript("MU_function", new object[] { ObjEvent , Objthis });
Do you know how can we serialize to javascript object ???
I tried the XML one but I don't know how to make them in the function pamaretres!!!
|
|
|
|
|
Hey Guys
i have a lil problem with the following line of code...
txtIp.Text = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString();
on winXP it returns the correct IP Address but on winVista it returns garbage.
if i change the AddressList[] index to 2(3rd position) it returns the correct IP address
if i change the AddressList[] index in winXP to anything other than 0 i get an indexOutOfBoundsException
what is up with that?
why is there more indexes in vista and only one in XP?
any ideas why and how to fix it because the same app will run on xp and vista
ps. both the computers i tested this on is exactly the same from a hardware point of view, only the OS differs, windows XP Pro Service Pack 2 and windows vista business.
thanx
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
Have you compared the exact result you get in the AddressList array? Just a hunch: Windows Vista has IP v6 support enabled by default, meaning you get separate entries for both the IP v4 stack and the IP v6 stack. You can filter out the version you want by looking at the AddressFamily property for each IPAddress returned by GetHostEntry .
Standards are great! Everybody should have one!
|
|
|
|
|
yes that makes sense!
i fixed the issue like this
private void getIP()
{
System.OperatingSystem osInfo = System.Environment.OSVersion;
switch (osInfo.Version.Major)
{
case 3:
txtIp.Text = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString();
break;
case 4:
txtIp.Text = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString();
break;
case 5:
if (osInfo.Version.Minor == 0)
{
txtIp.Text = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString();
}
else
{
txtIp.Text = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString();
}
break;
case 6:
txtIp.Text = Dns.GetHostEntry(Dns.GetHostName()).AddressList[2].ToString();
break;
default:
txtIp.Text = "Unknown";
break;
}
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
txtIp.Text = Dns.GetHostEntry(Dns.GetHostName()).AddressList[2].ToString();
You really shouldn't use this, or even AddressList[0] , without checking there actually are enough entries. Also, there's no guarantee the value you want is always in the same position of the array: This depends on the installed hardware, in some cases there might not be even network hardware installed, giving you an uncaught IndexOutOfBounds exception, and on some Windows XP machines IP v6 is actually enabled (you can use it in XP, it's just not enabled by default).
Here's a better way of doing it:
IPAddress[] list = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
foreach (IPAddress a in list)
if (a.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
Console.WriteLine(a.ToString());
Standards are great! Everybody should have one!
|
|
|
|
|
thanx, ill try and let you know how it went
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
tried, tested and APPROVED!
thanx alot dude, that silly case statement irritated me! thats exactly why i posted our solution to the problem, in the hopes of someone giving me a better way
thanx again
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
you.suck = (you.passion != Programming)
|
|
|
|
|
You're welcome.
Standards are great! Everybody should have one!
|
|
|
|
|
I've got a snippet of code that was working until recently but now appears to just write the text to disk without encrypting it.
public static void EncryptToFile(string ConfigData, string FilePath)<br />
{<br />
FileStream fStream = File.Open(FilePath, FileMode.OpenOrCreate);<br />
Rijndael myRijndael = Rijndael.Create();<br />
ICryptoTransform encryptor = myRijndael.CreateEncryptor(_key, _IV);<br />
CryptoStream csEncrypt = new CryptoStream(fStream, encryptor, CryptoStreamMode.Write);<br />
StreamWriter sw = new StreamWriter(csEncrypt);<br />
sw.WriteLine(ConfigData);<br />
sw.Close();<br />
csEncrypt.Close();<br />
fStream.Close();<br />
}
the code was almost copied line for line from MSDN and I've seen plenty of examples where people suggest doing something similar.
Does anyone know what i'm doing wrong?
cheers
Russell
|
|
|
|
|
Usually the file path you are looking for is incorrect. Ie the file you are checking is not the file that is being written.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
i'd checked that.
I deleted the file then ran the code from start to finish of the method and can see the file being created in explorer.
Cheers,
Russell
|
|
|
|
|
I suddenly thought that there might be some caching going on as the file being saved was xml and opening in IE.
when i deleted the file on disc and refreshed the file I can still load the page of xml in IE unencrypted.
Notepad tells a different story though.
Cheers for your help
RUssell
|
|
|
|
|
I want to create 5 threads doing five different jobs..
I also want a mechanism to stop any of these threads at any point of time..
What methods do I use?
Do I have to use delegates?
Som
|
|
|
|
|
You can use a thread pool for this matter. You can use thread.Suspend() at any time to kill any of this thread.'
Thanks
Laddie
Kindly rate if the answer was helpful
|
|
|
|
|
Is there a limit to the thread pool??
What if I have say 5000 threads?
Som
|
|
|
|
|
You can set the ThreadPool's minimum and maximum amount of threads yourself. 5000 can be done, but you should reconsider your design if you need that many. I recommend against using Thread.Suspend, it's bad practice. Use a boolean value as an exit flag and check for this value in the thread itself.
Standards are great! Everybody should have one!
|
|
|
|
|
Hi All,
Over the last couple of days I’ve been implementing my first ever instance of binary object to disk, disk to object serialization.
I have tested this serialization code and its all working as expected. If I hard code an initiated serialization process inside the same class that builds the object the save happens without error. However, once that object has been build and passed back to the interface and bound to a grid trying to start a serialization process then generates this error:
Message="Type 'System.Collections.Specialized.CollectionChangedEventManager' in Assembly 'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable." Source="mscorlib"
I think I know what the problem is but just wanted to get some more insightful input. When I pass this ‘loaded’ object to my serialization process (even though its based on my class FileInformation which is marked [Serializable()] and also implements ISerializable (GetObjectData…ect…) its not being passed to the serialize class as a serializable object. At the moment when I load a file I do it like:
ObservableCollection<FileInformation> loadeddata = loaddata.LoadDatabseData(fileToLoad);
loaddata is a new instance of my serialization class instantiated like:
DatabaseStorage loaddata = new DataBaseStorage();
When I ‘pass’ this object to the serialization process I do it like:
public ObservableCollection<fileinformation> DataToSave
{
Get {return DataGrid.DataSource;}
}
(DataSource can be used on the xamDataGrid from Infragistics to either get or set the datasource)
After doing some more reading about serialization last night I found out that binary serialization also stores instance information, could this be part of the problem?
I've also read about this problem being related to events and delegates in the class marked as [Serializable()] not having been marked as [NotSerializable] however, my class FileInformation does not contain any delegates or events ... it does have a property that creates a lookup but that is not included in my GetObjectData() method ...
Thanks for any input ...
Jammer
Going where everyone here has gone before!
My Blog
|
|
|
|
|
Does that even compile? ObservableCollection seems to be a generic object which means the return type from DataToSave is not complete and requires type arguments. This should be a compiler error.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
Sorry that was formatted by the forum ... it actually reads:
ObservableCollection<FileInformation>
Jammer
Going where everyone here has gone before!
My Blog
|
|
|
|
|
Actually, I've just tried what I thought was the problem buts its not fixed the error.
Type 'System.Collections.Specialized.CollectionChangedEventManager' in Assembly 'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable.
I've just re-read this ... does this mean that my serialization is actually trying to serialize part of the WindowsBase???!!!
Any help with my error would be great. I'm really stuck with this.
Jammer
Going where everyone here has gone before!
My Blog
|
|
|
|
|
Hi,
I have to UPDATE a generic collection (ysIsins) which is already populated. Lets say there are hundreds of records.
One of the fields in the collection is called ISIN i.e. ysIsins.ISIN
I have to look for the records inside ysIsins which have the same values in the ISIN field.
For these ones, I have to refer to a datatable to get the position field for those isins and update the collection accordingly...
datatable has only the Isin values which are repeated
Notice there are repeated ISIN fields
data inside dtRiskPositionsRepeatedIsins is as follows:
ISIN Position
XS0211873053 80
XS0211873053 2500
XS0222981358 1000
XS0222981358 1000
XS0279930449 3000
XS0279930449 -3000
XS0279930449 -1250
XS0282585859 5000
XS0282585859 1000
This is what I am doing but it does not seem to be correct.
Any thoughts please?
foreach (DataGridViewColumn col in dgvProfitAndLoss.Columns)
{
string strColumn = col.Name.ToString();
if (strColumn.ToLower() != "country")
{
int intColumn = int.Parse(col.Name.ToString());
for (int r = 0; r < YSisins.Count; r++)
{
if (YSisins[r].SpreadIncrement == intColumn)
{
foreach (DataRow dr in dtRiskPositionsRepeatedIsins.Rows)
{
if (YSisins[r].ISIN == dr["Isin"].ToString())
{
YSisins[r].Position = dr["Position"].ToString();
}
}
}
}
}
}
|
|
|
|
|
How to implement A Find module for a web browser application built on C#?
|
|
|
|
|
You voted me a 1 the last time I answered you, but I'm going to do it again. Because, I do this to try to help people, even people who don't listen.
C#.NET is NOT an acceptable header. We are all talking about C# in here. That's why it's a C# forum
Why people insist on embedding IE in a form, then try to make it act like IE, is beyond me.
You got all the answers you need last time. You can build a google URL quite simply given a search term. If you didn't understand the answers, then you probably need to choose an easier project, and buy a book and read it.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|