|
If you have VS.NET (or Visual C# Standard or VB.NET Standard) embedding a bitmap resource is fairly easy.
1st: Add the bitmap to your project.
2nd: Set the "Build Action" of the bitmap to "Embedded Resource", this is set in the properties for the bitmap.
3rd: Figure out the name of the bitmap in the built assembly. To do this, take the default namespace of the project, then append any folders the bitmap may be in, finally append the bitmaps filename.
ex. The default namespace of your project is "defnamespace", the bitmap is placed inside a folder named "images" and the bitmap is named "mybitmap.bmp". The full name of the bitmap in the assembly is "defnamespace.images.mybitmap.bmp".
One of the Bitmap's constructors takes the namespace of a Type that is passed in, and appends the filename that is also passed in to find the bitmap to load from.
The constructor looks like this:
Bitmap(Type type, string filename)
To use it; supply the type that matches the full name of the bitmap; then for the filename supply what is missing.
ex. If the Type passed in has the namespace of "mycompany.myproduct" and the filename passed in is "images.mybitmap.bmp" it will search for a bitmap named "mycompany.myproduct.images.mybitmap.bmp".
If you prefer to get a Stream object (which works for any file) life gets easier for you
First you need a reference to the Assembly that contains the bitmap; unless you're dealing with multiple assemblies, you can get that by getting the Type that represents the class you are dealing with (GetType() for instance methods or typeof(MyClass) for static methods) then use the Assembly property on it.
Now call the GetManifestResourceStream and pass in the full name of the bitmap.
Use the stream it returns to load the bitmap up as if it were any other stream.
ex. The full name of the bitmap is "mycompany.myproduct.resources.mybitmap.bmp" and the class is named "MyClass".
System.IO.Stream stream = null;
Bitmap bitmap = null;
stream = typeof(MyClass).Assembly.GetManifestResourceStream("mycompany.myproduct.resources.mybitmap.bmp");
bitmap = new Bitmap(stream); There is an overload of GetManifestResourceStream which takes the same parameters as the Bitmap constructor that was discussed. But if you wanted to use that form, you may as well use the Bitmap constructor.
HTH,
James
"Java is free - and worth every penny." - Christian Graus
|
|
|
|
|
Has anyone had any experience with the MouseLeave event for the button control? Will it dependably fire or will it not go if the mouse is moved to quickly?
If necissary I could add some code to the form to check the position of the mouse, but I'd prefer not to .
Thanks,
Steve
|
|
|
|
|
See TrackMouseEvent
Normski. - Professional Windows Programmer
|
|
|
|
|
Hi,
Does anyone know if there is an update function in C# that will allow a TreeView to be sorted alphabetically? I have items being added to my tree but they just aren't being listing alphabetically. If I close my program out and rerun it -- it is then that they are listing alphabetically. Did I miss something? Any help would be greatly appreciated. Thank you.
cAptHiDDeN
|
|
|
|
|
Hi,
I would like to create a simple user control. It only should draw a border. I did that, added it to the toolbox, used it, and it was no problem.
But:
I would like my user control to be transparent, so that the background of the parent form is visible everywhere my user control does no drawing.
Hope you understand and give me an advise.
Thanks
|
|
|
|
|
I don't know how to do Localization in ASP.NET, if somebody has an example please provide.
Thanks in advance.
|
|
|
|
|
I have one c# form and a textbox on it. I want to accept only numric values through it .
Is there any such control property?
VIKS
|
|
|
|
|
Not built in. You can find various masked inputs that other people have made, or you can override OnKeyPressed and OnTextChanged to cancel any non-numeric input.
|
|
|
|
|
Thanx for the reply.
VIKS
|
|
|
|
|
You can use regular expressions to control the input; here you can find a short tutorial with examples for regular expressions: http://www.c-sharpcorner.com/3/RegExpPSD.asp
|
|
|
|
|
My situation is that I have two tables: tblKeyword and tblProjectKeyword.
tblKeyword contains a list of available keywords (intKeywordID, txtKeyword).
tblProjectKeyword (intProjectID, intKeywordID).
tblProjectKeyword.intKeywordID is a FK to tblKeyword.intKeywordID.
tblProjectKeyword.intProjectID is also a FK to another table. So the
tblProjectKeyword table is a Many-Many relationship... a join table.
What I'd like to do is bind the contents of tblKeyword to a CheckListBox
control but have all the matching records in tblProjectKeyword appear
checked for a specific project. My keywords work similar to the Categories
window in Outlook items... the user will be able to check/uncheck and add
more keywords to the list.... So, the CheckedListBox would contain ALL
keywords, and have only those in the tblProjectKeyword checked. Additions
to the list would be added to the tblKeyword table and checked items would
be added to the tblProjectKeyword table.
Currently I'm implementing this manually (creating all the items... when one
is checked, I add a record to the table, etc, etc). I was wondering if I
could use databinding with this complex example. I know you can bind a
table to it, but I didn't know if I could bind two tables with some specific
conditions.
Currently, I am binding the tblKeyword table to the control.. then stepping
through everything in the list, checking to see if it's in the tblProjectKeyword list, and checking those that are found. When the checked state changes, I manually add/delete items to the tblProjectKeyword Datatable.
Thanks for your input in advance!
AC
Andrew Connell
IM on MSN
andrew@aconnell.com
|
|
|
|
|
how do i get all the treenodes in a treeview including the subdirectories??
treenodecollection = treeview.topnode.nodes return only the child nodes of the topnode and doesnt include the subdirectories.
i = treeview.topnode.getnodecount(true) does return the count but doesnt seem to return the nodecollection as such.
Is there any method available or it has to be implemented recrusively.
thanks.
|
|
|
|
|
I believe you'll have to loop through the node collection for each node.
James
"Java is free - and worth every penny." - Christian Graus
|
|
|
|
|
I'm just wondering about the C# using operator and what it means in terms of style.
In C# you can either do:
Font font = new Font("Arial", 10.0f);
...
font.Dispose();
or
Font font = new Font("Arial", 10.0f);
using (font)
{
...
}
Has anyone used the using keyword? If so, why? For convenience? Style? For fear that IDisposable may be changed in future releases and using will still work while Dispose may not?
Just curious.
cheers,
Chris Maunder
I spent a minute looking at my own code by accident. I was thinking "What the hell is this guy doing?" - @Logan
|
|
|
|
|
a using statement written like this:
using( Font font = new Font("Arial", 10.0f) ) {
// use font
}
actually translates to this:
try {
Font font = new Font("Arial", 10.0f) );
// use font
} finally {
if ( font != null ) {
((IDisposable)font).Dispose();
}
}
now i don't know about you...
but i find the "using" method much clearer and easier to read.
|
|
|
|
|
Except that if there is more than 1 resource it gets ugly.
|
|
|
|
|
Excellent point.
It's strange that in C++/SDK code you rarely see developers checking every return code and every HRESULT to ensure that things are going smoothly. I wonder if constructs like using will enourage more developers to be a little more careful.
cheers,
Chris Maunder
I spent a minute looking at my own code by accident. I was thinking "What the hell is this guy doing?" - @Logan
|
|
|
|
|
I liked it initially but it really gets ugly for nested loops and more than 1 resource. C++ smart types are far better. I prefer to use try {} finally {} now.
|
|
|
|
|
|
the garbage collector is for handling memory, not scares resources like GDI stuff, file locks, and database connections.
|
|
|
|
|
|
maybe, but not neccessarily before somebody else NEEDS that resource NOW.
GC is designed to handle memory deallocation. It's not really designed to handle database connection management. that's oledb's responsibility, and it would do it much better than any generic garbage collection could.
|
|
|
|
|
GC process doesnot call Dispose it only calls Finalize. Dispose is to free resources.
In Finalize you can free only unmanaged resources and not managed resources. So in case of Font this is ok but again it takes time. I prefer to clean up stuff myself.
More important is freeing managed stuff. (I realized this after seeing areecnt thread in DOTNET list).
StreamWriter writes text in buffers. The buffer is a byte array. So in Finalize you can't flush the buffer. So the only place where you can flush the buffer is Dispose/Close. In these cases you need to call Dispose/Close.
May be our resident C# specialist JTJ can add more to it
|
|
|
|
|
You pretty much summarized the reason to explicitly call Dispose on objects that implement it
One thing I noticed though; was you said it can make the code ugly if you have multiple objects to call dispose on; you can simplify it; if they are in one block.
Font f = ....;
Brush br = ....;
Bitmap bi = ....;
try
{
.....
}
finally
{
f.Dispose();
br.Dispose();
bi.Dispose();
} Could become
using(Font f = ....)
using(Brush br = ....)
using(Bitmap bi = ....)
{
.....
} Which is much much cleaner than the mass indentation you would get otherwise.
James
"Java is free - and worth every penny." - Christian Graus
|
|
|
|
|
using(Font f = ....)
using(Brush br = ....)
using(Bitmap bi = ....)
This works. But unfortunately, the generated code still has 3 try{}finally{} blocks.
|
|
|
|