|
If you use:
if (foo == null)
{
System.Data.Foo _Foo = new System.Data.Foo;
}
Now _Foo is only available within the { and } .
Now, if you could use the short version:
if (foo == null)
System.Data.Foo _Foo = new System.Data.Foo;
...then where would _Foo be available? In the { and } , which you left out, or in the parent's context (e.g. between the methods { and } )?
Because of this confusion, it is not possible.
|
|
|
|
|
yes correct
but i see the c# schema ambiguous ;)
|
|
|
|
|
I cant seem to get my text to align in a list box, heres my code, i just cant remember what im doing wrong, im trying to left align the first string, then have both of the following strings in left aligned columns. But depending on the size of the first string, the second and third strings end up offset.
String.Format("{0, -20}", m_sTimerName) + String.Format("{0, 10}", m_iInitialTime.ToString()) + String.Format("{0, 10}", m_bRepeat.ToString());
Thanks,
Ryan
|
|
|
|
|
Ryan@SalamanderTechnologies wrote:
im trying to left align the first string, then have both of the following strings in left aligned columns. But depending on the size of the first string, the second and third strings end up offset.
2. Those last 2 should be -10.
1. if the timername is too long it will screw up.
leppie::AllocCPArticle("Zee blog"); Seen on my Campus BBS: Linux is free...coz no-one wants to pay for it.
|
|
|
|
|
Whoa! Talk about string concatenation inefficiencies! String concatenation is one slow piece of code. For each concat, the CLR needs to measure the length of each string, then create a string large enough to hold the total length, then copy the characters from each string. This is a 2*O(n+m) operation. Instead, just use String.Format one:
string.Format("{0,-20}{1,-10}{2,-10}",
m_sTimerName, miInitialTime, m_bRepeat); Notice also that you don't need to call ToString on non-string variables. String.Format will do this automatically, or it will use "G" for the format if the object implements IFormattable , or it will call Format if the object implements ICusotmFormatter (see the String.Format documentation for details). Leaving the formatting details to String.Format makes it easier to take into account globalization (i.e., using the regional settings when necessary/available).
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Thanks for the coding suggestion Heath. I did indeed implement it as you have shown, and the second and third columns do not line up. The larger or smaller for that matter the first column is, depends on where the second and third columns end up. I was hoping to have them all aligned, and the values I was testing the first column with did not exceed the length in the format. Any suggestions? I am also using a true type font.
Ryan
|
|
|
|
|
The font doesn't matter with String.Format - it's about the number of characters. The code fragment I gave you also uses your original code plus the suggestion before mine (using the negative operator, which was a correct solution) to yield better coding. As I stated - never concatenate strings so hap-hazardly! The code I gave merely was a solution to your concatenation snaffu.
The problem you're having is two-fold: String.Format - and the format specifiers that the previous guy mentions - align text up to the amount specified. Any more than that and the rest of the string is pushed over to make room for larger strings. If you don't mind this string being cut off, you'll have to trim it before using String.Format .
The second problem does have to do with the font and your word alignment (the first statement I made above about the font was in relation to character alignment). If you're not using a fixed-width font, you won't be able to get the text to line up because the sum of the widths of each character will most likely be different for each line. If you really need to line up your text, consider using a ListView .
If you're doing this for a console app, you'd be a fool to use a nothing but a fixed-width font for your console window (specifying a font in the app - at least for now - won't do anything). Most utilities rely on using a fixed-width font to format their output.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
My class contains an unmanaged system object member (a user profile handle) that is initialized in the static constructor. Conversely, I need to free the object when the class (not object instances) is destroyed, but I've never heard of a static destructor.
Perhaps I could use Environment.HasShutdownStarted in the finalizer, but all instances could have already been gc'd when the AppDomain unloads and the code wouldn't run.
Perhaps I could use the AppDomain.Unload event to run my code.
Any thoughts?
|
|
|
|
|
CBoland wrote:
but I've never heard of a static destructor.
They are allowable by the CLR, but I suggest using a Singleton pattern instead of static if it involves any resources.
leppie::AllocCPArticle("Zee blog"); Seen on my Campus BBS: Linux is free...coz no-one wants to pay for it.
|
|
|
|
|
Good call. Thanks for the reply.
|
|
|
|
|
I need to split a string in C# into tokens, separated by whitespace characters. What would be the best way for me to do this? I just found out about the Split method in the string class, are there other options available?
Wenn ist das Nunstück git und Slotermeyer? Ja! Beierhund das oder die Flipperwaldt gersput!
|
|
|
|
|
If you know RegEx you can try that, else I would stick to the split method, simply and easy
leppie::AllocCPArticle("Zee blog"); Seen on my Campus BBS: Linux is free...coz no-one wants to pay for it.
|
|
|
|
|
Something like this worked for me:
foreach( string sToken in sOriginal.Split( " \t\r\n".ToCharArray() ) )
{
}
|
|
|
|
|
Is anybody aware of anything (API) out there that will generate a PDF file using an XSL:FO file that can be integrated into a C# application?
Here be more info :
I am currently working on an application that pulls data from a MSSQL database and put this into a PDF document. For various reasons I am tied to using a fully C# based open source solution. Although these rules can be "bent" if I find a fast non C#/Closed Source implementation.
I have come across a J# port (http://sourceforge.net/projects/nfop) of Apache FOP (http://xml.apache.org/fop) but unfortunatly I have been unable to locate a C# port (with the exception of http://sourceforge.net/projects/fop-dotnet which isnt even 30% completed). Both FOP and nFOP work fine, but they are too slow (FOP - 6 secs average, nFOP - 20 secs average)
In my search for a decent solution, I have played around with iTextSharp (http://sourceforge.net/projects/itextsharp) which requires me to create the entire document in code and doesnt support templates. I have also found Report.NET (http://sourceforge.net/projects/report/) and iSEDquickpdf(http://www.sedtech.com/isedquickpdf/). Both of which suffer from the same problem as iTextSharp. Creating the entire document within code isnt feasible as any change to the document layout would require a recompile and re-release, whereas with XSLT/FO templates any changes can be done in a matter of seconds. There is one solution I have found at http://www.antennahouse.com/ the problem here is that it is far to costly ($5000+).
Having searched through the forums here, it seems that this question has only been asked once before, and it unfortunatly turned into a flame war, so no answers to be found there.
So back to the original question : Is anybody aware of anything (API) out there that will generate a PDF file using an XSL:FO file that can be integrated into a C# application?
post.mode = signature;
SELECT everything FROM everywhere WHERE something = something_else;
> 1 Row Returned
> 42
|
|
|
|
|
http://www.xmlpdf.com/ibex.html[^] works well for me.
be aware that XSL-FO is always going to be slower than other rendering techniques due to the XML overhead.
"When the only tool you have is a hammer, a sore thumb you will have."
|
|
|
|
|
In my travels through this problem, I havent come across this one.
So I downloaded their evaluation version, and unfortunatly it doesnt work correctly. The PDF I am using has a fairly complex table layout, and also has various embedded images. This renders fine in nFOP and Apache FOP but XMLPDF doesnt seem to able to render these correctly.
post.mode = signature;
SELECT everything FROM everywhere WHERE something = something_else;
> 1 Row Returned
> 42
|
|
|
|
|
I came from a VB background. How do I declare a global variable (collection in c#).
I have a combo box in multiple winform that get populate by a table in the DB,I want to read the table into a collection then populate the form each time it loads instead of read from the DB.
|
|
|
|
|
You can't.
What you can do is declaring a public property on the main form which contains the collection, and then accessing this property from whereever you need the collection. Or you use this property as a parameter when calling the other forms.
But a global variable can't be created (and they are evil, I'm told...;)).
|
|
|
|
|
In .NET (true for any language that targets the CLR) there is no such thing as global variables. Instead, though, you can create a class with static fields or properties (properties are usually recommended because you can validate inputs and use logic in your get or set accessors that access a private field. This has the same result, though, at least per AppDomain (if you need a "global" to span multiple AppDomain s, you should consider a ContextBoundObject ).
public class Globals
{
private static object someProperty;
private Globals()
{
}
public static object SomeProperty
{
get { return someProperty; }
set { someProperty = value; }
}
} If you need the power of a singleton, search the comments of this forum for a recent thread discussing various options. Just use the keyword "singleton", of course.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
How can I write to my application configuration file from my application?
Mazy
No sig. available now.
|
|
|
|
|
There is not built-in support for writing app configs, but you can use the System.Xml classes to manipulate the XML DOM. Note that your application will not see these settings until restarted, though. I did post several replies to similar questions in the recent past, so search the comments of this forum, using the AppDomainSetup keyword.
As far as writing to the config, you have to remember one very important thing: leave other settings untouched! Users may have customized how the CLR runs your app or even customized settings for your program (like, in <appSettings> ) that you don't want to overwrite. Nick wrote one article about this: http://www.codeproject.com/csharp/config_settings.asp[^]. There are others, too.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
twoPartQuestion = true;
1) When storing application state information such as window position, comm port settings, etc... should I be using the registry or special folders? I'm writing for Win2K or newer if that makes a difference.
2) If/when using special folders, what is a good way to format the data that needs to be saved? I'm thinking of a couple ways:
- Making a struct that contains all of the data that needs to be saved and serializing it as XML to a file.
- Using ADO.NET and making a table that is serialized to XML and saved in a file.
Is there a preferred or normal way to handle this data?
Thanks,
Ken Galer
Electrical Engineer
Preferred Utilities Corp.
Danbury, CT 06810
|
|
|
|
|
Ken Galer wrote:
should I be using the registry or special folders
Never use the registry unless you have to. This breaks XCOPY deployment (at least with base settings). It's also not recommended because...well...it's just not!
As far as serializing to an XML file, this is pretty common but it is up to you how, when, and where. There is no "standard". You could use the XML serialization attributes in System.Xml.Serialization , a DataSet (both of which you said), or write-out an XML file using the DOM.
Do a search here on CP and you'll find several articles about writing-out XML files, or appending data to the .config file for your app (true, just another XML file, but a specially named one if you wanted to use an IConfigurationSectionHandler like other settings). I believe Nick Parker wrote a good one on that, so you could search for articles from him.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
i have win form and i have registered keyboard event for it
but it doesn't work
////////////////////////
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyDown);
////////////////////////
private void MainForm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
MessageBox.Show(e.KeyValue.ToString());
}
////////////////////////
but when i press any key on my keyboard, i doesn't recieve any thing.
thnx in advance
|
|
|
|
|
i recieve nothing.....
thnx
|
|
|
|