|
Yea, I've been using ArrayLists since like forever, only just found out about the List (actually while looking for ways to get this serializing to work).
So if I ever get around to optimizing my code, I'll definitely use that, and of course in future code
Thanks for the help, and I hope to see a better way to set that serializing as binary, although you don't need to rush. This is just for a private little project I got here, experimenting new things while making my life easier (this is part of a tool that keeps track of all the tv shows I watch, displaying it in an organized way so I know which episodes or whichs shows I still have to watch, when they will air, etc).
|
|
|
|
|
The only way I can think of is to do your own serialization/deserialization in code to XML. If you do that you can simply save it in the user scoped application settings as a string.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
There's no way this should be such a pain! The code below demos how to serialize a generic list of a Serializable class to an XML string, and then recreates the list from the string.
I've kept the string in memory here, but obviously this can be read from / written to the settings. I haven't done any error checking etc so it's not complete, but should be enough get started!
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Xml.Serialization;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Group group1 = new Group("Test1", true);
Group group2 = new Group("Test2", false);
GroupCollection groups = new GroupCollection();
groups.AddRange(new Group[] { group1, group2 });
string xmlString = groups.SerializeToXMLString();
groups.Clear();
Console.WriteLine(xmlString);
groups = GroupCollection.DeSerializeFromXMLString(xmlString);
foreach (Group group in groups)
{
Console.WriteLine(
String.Format(
"Name={0}, IsVisible={1}",
group.Name, group.IsVisible));
}
}
}
[Serializable]
public class Group
{
public Group()
{
Name = string.Empty;
IsVisible = false;
}
public Group(string name)
{
Name = name;
IsVisible = false;
}
public Group(string name, bool isVisible)
{
Name = name;
IsVisible = isVisible;
}
public string Name { get; set; }
public bool IsVisible { get; set; }
}
public class GroupCollection : List<Group>
{
public string SerializeToXMLString()
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(GroupCollection));
string xmlString = string.Empty;
using (MemoryStream memoryStream = new MemoryStream())
{
xmlSerializer.Serialize(memoryStream, this);
xmlString = FromByteArray(memoryStream.GetBuffer());
}
return xmlString;
}
public static GroupCollection DeSerializeFromXMLString(string xmlString)
{
GroupCollection result;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(GroupCollection));
using (MemoryStream memoryStream = new MemoryStream(ToByteArray(xmlString)))
{
result = (GroupCollection)xmlSerializer.Deserialize(memoryStream);
}
return result;
}
private String FromByteArray(Byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
string xmlString = encoding.GetString(characters);
return (xmlString);
}
private static Byte[] ToByteArray(string xmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(xmlString);
return byteArray;
}
}
}
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
modified on Friday, March 20, 2009 9:12 PM
|
|
|
|
|
Ok this has been bugging me all night. The trick is to use ApplicationSettingsBase[^].
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
private GroupSettings groupSettings = new GroupSettings();
public Form1()
{
InitializeComponent();
List<Group> groups = groupSettings.Groups;
if (groups.Count == 0)
{
Group group1 = new Group("Test1", true);
Group group2 = new Group("Test2", false);
groups = new List<Group>();
groups.AddRange(new Group[] { group1, group2 });
groupSettings.Groups = groups;
groupSettings.Save();
}
else
{
foreach (Group group in groups)
{
Console.WriteLine(
String.Format(
"Name={0}, IsVisible={1}",
group.Name, group.IsVisible));
}
}
}
}
[Serializable]
public class Group
{
public Group()
{
Name = string.Empty;
IsVisible = false;
}
public Group(string name)
{
Name = name;
IsVisible = false;
}
public Group(string name, bool isVisible)
{
Name = name;
IsVisible = isVisible;
}
public string Name { get; set; }
public bool IsVisible { get; set; }
}
internal sealed class GroupSettings : ApplicationSettingsBase
{
[UserScopedSetting()]
[SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)]
[DefaultSettingValue("")]
public List<Group> Groups
{
get { return (List<Group> )this["Groups"]; }
set { this["Groups"] = value; }
}
}
}
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
I've leaned quite a bit from investigating this so I've put it together in an article here[^] if you're interested.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
Yea, reading it now, thanks
I noticed an error in the article though. At the 'Your own types' paragraph you say there is no way to select your own classes as the type using the UI. This is wrong. When selecting the type you can also choose to browse, if it isn't in the menu there you can also just manually type it in and if you did correctly it will be used perfectly.
I.E. if you namespace is called 'MyFirstProgram' and you have a class called 'MyFirstClass' you could set the setting's type to MyFirstClass by selecting browse and typing 'MyFirstProgram.MyFirstClass' in the textbox and press OK
|
|
|
|
|
Interesting - I'm getting a 'Type xxx is not defined' error. Made sure there's no typos. I'll check it out more later.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
How we can dézip file?? i have search bu i have not find the free class to dezipe, pleaz help me to resolve this problem thank you verry mutch.
|
|
|
|
|
try SharpZipLib[^]
hope it helps
dhaim
ing ngarso sung tulodho, ing madyo mangun karso, tut wuri handayani. "Ki Hajar Dewantoro"
in the front line gave a lead, in the middle line build goodwill, in the behind give power support
|
|
|
|
|
Hello,
I try for :
<br />
<br />
FileStream fileStreamIn = new FileStream(@"G:\5.zip", FileMode.Open, FileAccess.Read);<br />
ZipInputStream zipInStream = new ZipInputStream(fileStreamIn);<br />
ZipEntry entry = zipInStream.GetNextEntry();<br />
FileStream fileStreamOut = new FileStream(@"c:\unzip_file", FileMode.Create, FileAccess.Write);<br />
<br />
int size;<br />
byte[] buffer = new byte[BufferSize];<br />
do<br />
{<br />
size = zipInStream.Read(buffer, 0, buffer.Length);<br />
fileStreamOut.Write(buffer, 0, size);<br />
} while (size > 0);<br />
<br />
zipInStream.Close();<br />
fileStreamOut.Close();<br />
<br />
unfortunatly in C:\\ i find unzip_file with empty, i d(ont obtain folder!! help me please, thank you verry mutch.
|
|
|
|
|
System.IO.Compression.GZipStream or System.IO.Compression.DeflateStream.
First one includes zip headers, the other one handles raw data. GZipStream from what I've heard handles only simpler files, so if it won't be enough for your need, try external library that Mbah Dhaim has mentioned.
|
|
|
|
|
Hello,
Can we Show a console window for 10sec in C# console application??
Thank you verry mutch.
|
|
|
|
|
is this what you mean?
System.Console.WriteLine("Show in 10s");
System.Threading.Thread.Sleep(10000);
dhaim
ing ngarso sung tulodho, ing madyo mangun karso, tut wuri handayani. "Ki Hajar Dewantoro"
in the front line gave a lead, in the middle line build goodwill, in the behind give power support
|
|
|
|
|
but on end of 10 the console window is showed, i would close it, thank you veery mutch.
|
|
|
|
|
try this
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void Main(String[] args)
{
System.Console.Title = "myconsole";
IntPtr hWnd = FindWindow(null, "myconsole");
ShowWindow(hWnd, 0);
System.Threading.Thread.Sleep(10000);
ShowWindow(hWnd, 1);
System.Console.ReadLine();
}
}
}
but at first time your console will appear
any idea?
dhaim
ing ngarso sung tulodho, ing madyo mangun karso, tut wuri handayani. "Ki Hajar Dewantoro"
in the front line gave a lead, in the middle line build goodwill, in the behind give power support
|
|
|
|
|
You want to show windows for 10 secs and then close it, but still have running app? You could try doing it by building application as WindowApp, allocating and freeing console using PInvoke (search for AllocConsole).
I was bored, so I've cooked up sth like this:
public class Program
{
[DllImport("kernel32.dll")]
static extern int AllocConsole();
[DllImport("kernel32.dll")]
static extern int FreeConsole();
[DllImport("kernel32.dll")]
static extern IntPtr GetStdHandle(int nStdHandle);
public static void Main()
{
AllocConsole();
IntPtr outp = GetStdHandle(-11);
SafeFileHandle safeOut = new SafeFileHandle(outp, true);
Stream str = new FileStream(safeOut, FileAccess.Write);
TextWriter con = new StreamWriter(str);
con.Write("ff");
con.Flush();
Thread.Sleep(10000);
safeOut.Close();
FreeConsole();
Thread.Sleep(10000);
}
As you can see, obtaining TextWriter is a bit more tricky, but after doing that, it's as simple as using Console.Write.
|
|
|
|
|
Hello,
How i can verify if an excetubale like word.exe or excel.exe work in my machine? Thank you verry mutch.
|
|
|
|
|
Hello,
I'm stuck on a problem casting an LPARAM.
I'm attempting to broadcast a message to all window handles using:
SendMessageTimeout(
HWND_BROADCAST,
WM_SETTINGCHANGE,
SPI_SETNONCLIENTMETRICS,
(LPARAM)"WindowMetrics",
SMTO_NORMAL|SMTO_ABORTIFHUNG,
10000, NULL);
But the cast (LPARAM) does not seem to work. {I think that's call a cast)
Can anyone help me write the (LPARAM)"WindowMetrics" attribute properly?
Thanks,
Matt Brown
|
|
|
|
|
Hey Matt, you posted this in the C# forum but there is no indication in your post that you are using C# so can you verify you are using C#?
bbranded wrote: But the cast (LPARAM) does not seem to work.
On what are you basing that statement?
bbranded wrote: Can anyone help me write the (LPARAM)"WindowMetrics" attribute properly?
Those are called function "parameters" not "attributes".
|
|
|
|
|
1) Since I posted in the c# forum, assume I'm using C#
2) I'm not sure I'm using the right terminology by using the word "cast." I tried it, it's not working.
3) Great.
I'm trying to refresh the desktop icon cache and found this page[^] (see "Flushing Cache Entries").
This is[^] what I'm working on doing at this moment. I have hopes it will work.
[FYI: this[^] works fine]
private static extern long SendMessageTimeout(
int hWnd,
int Msg,
int wParam,
string lParam,
int fuFlags,
int uTimeout,
out int lpdwResult
);
RegistryKey k = Registry.CurrentUser.OpenSubKey("Control Panel").OpenSubKey("Desktop").OpenSubKey("WindowMetrics", true);
k.SetValue("Shell Icon Size", "33");
k.Flush(); k.Close();
int res = 0;
SendMessageTimeout(0xffff, 0x001A, 0, "", 0x0002, 5000, out res);
k = Registry.CurrentUser.OpenSubKey("Control Panel").OpenSubKey("Desktop").OpenSubKey("WindowMetrics", true);
k.SetValue("Shell Icon Size", "32");
k.Flush(); k.Close();
SendMessageTimeout(0xffff, 0x001A, 0, "", 0x0002, 5000, out res);
I believe the common misconception with this strategy of icon cache clearing is that all of the icons move to the left side, to their "default" position (as if you click on the "align icons by name" verb in the progman context menu, etc). However, it is notable that this is only the case when (like TweakUI) you originally resize the icons to a very low number (let's say 4), causing their "foot print" to be very small (but in the same "positions" as you were before (like zooming out on a picture), before calling WM_SETTINGCHANGE. Therefore, when you resize them again (let's say to 32), then call WM_SETTINGCHANGE; all of your icons will assume this size and "force each other out of the way," and they will now appear to be aligned on the left side of the screen.
That's why it's suggested in both the Microsoft KB, and in various other sources, to resize the icon size value one lesser than or one greater than you current size.
Hope that's clear.
modified on Friday, March 20, 2009 6:33 PM
|
|
|
|
|
You'd be surprised and appalled at how often people new to the forums post here instead of the c++ forum, and what you were doing could just as easily be c++. Like it or not, sanity checks are inevitable.
Today's lesson is brought to you by the word "niggardly". Remember kids, don't attribute to racism what can be explained by Scandinavian language roots.
-- Robert Royall
|
|
|
|
|
Nice reply. As Dan points out, it is rare and a pleasure when someone posts as clear and complete as you have been.
What I believe you are struggling with is managed versus native memory issues. Some managed types match native types but strings are not one of them ( because they are pointers to memory) and require marshaling.
Check out this article[^] it should get you started down the path to your solution.
|
|
|
|
|
I've not used these stuff before except processing messages. However, I think you should convert the string to char[] and set it fixed then pass a pointer in the LParam.
Eslam Afifi
|
|
|
|
|
Hi All,
I am in a new situation for me i have to integrate a Microsoft Project into an asp.net application using C# i havent used Microsoft project until now so am really confused on how do get this task done.
I have to develop an interface where i can download a project into my asp.net application and vice versa.
I have searched a lot for help and all i get is automation of evrything except MS Project so if anyone of you can help me out of this situation its going to be a great help.
Hoping to see some replies asap.
Thanks in Advance,
Krishna.
|
|
|
|
|
kcadella wrote: I have searched a lot for help and all i get is automation of evrything except MS Project so if anyone of you can help me out
click here[^]
|
|
|
|
|