|
If the event needs parameters, you can define your own delegate:
<br />
public delegate void MyEventHandler (object sender, HostInfo details);<br />
public event MyEventHandler MyEvent;<br />
To fire your event, just call it as if it was a method:
<br />
if(MyEvent != null){<br />
MyEvent(this, Node);<br />
}<br />
|
|
|
|
|
Do you always need to declare an event with a delegate?
as I come from MFC, if I understand well, it seems that delegates are to C# what callbacks are to C/C++...
There is no spoon.
|
|
|
|
|
1) There are a couple pre-defined delegates (EventHandler, CancelEventHandler, and so on). If you need other parameters, you have to define a delegate.
2) Exactly. There are no "official" callback in C#, they have been replaced by delegates.
|
|
|
|
|
ok, I understood how it works... thanks
it's more simple than MFC...
There is no spoon.
|
|
|
|
|
oh, yes, one more thing,
how the caller of the event can use the fired event???
I have done this:
class PeerPlayer
{
public delegate void HostFoundHandler(HostInfo node);
public event HostFoundHandler HostFound;
...
}
...
PeerPlayer=pp=new PeerPlayer();
...
pp.HostFound+=????
There is no spoon.
|
|
|
|
|
I'm writing instalation program that creates web application. Before this could happen, IIS must be installed on the machine. If it is not, I would like to show warning message and gracefully end the installation process.
How can I check programatically if IIS is installed ?
Thank You
Michał
|
|
|
|
|
If you use the Windows Installer project in VS.NET, you can create a Web Project that does this already. If IIS is not installed, it will display an error and exit.
There are many ways of determining if IIS is installed, from checking for the inetmgr.exe in %WINDIR%\System32\inetsvr\ (use Environment.GetFolderPath(Environment.SpecialFolder.System) ) to get the %WINDIR%\System32 directory), or using System.DirectoryServices classes using the iis:// scheme (IIRC, if IIS isn't installed trying to use the IIS directory protocol should fail).
WMI (via System.Management ) should also give you information, although I don't remember what WMI classes you want to use off-hand.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Heath Stewart wrote:
There are many ways of determining if IIS is installed, from checking for the inetmgr.exe in %WINDIR%\System32\inetsvr\ (use Environment.GetFolderPath(Environment.SpecialFolder.System)) to get the %WINDIR%\System32 directory),
Thanks. I'll give these a try.
Heath Stewart wrote:
or using System.DirectoryServices classes using the iis:// scheme (IIRC, if IIS isn't installed trying to use the IIS directory protocol should fail).
I tried this already, and on WinServer 2003 I was able to get webRoot object, event though IIS had not been installed.
private bool DetermineIfIISIsInstalled()<br />
{<br />
try<br />
{<br />
DirectoryEntry deRoot= new DirectoryEntry("IIS://LocalHost/W3SVC/1/Root");<br />
if(deRoot==null)<br />
return false;<br />
}<br />
catch(Exception ex)<br />
{<br />
return false;<br />
}<br />
return true;<br />
}
Thanks
Michał
|
|
|
|
|
Hi!
I have made an application with a panel showing 2d graphics. Now I have found out that the grapichs are inverted, the x axis is pointing in the right direction but y is downwards when it should be upwards on the screen. I can´t really find any good way to invert the axis.
I could just change code doing the drawing, but the panel is accessed from a lot of places and it would take a lot of time. What I would like to do is invert the axix at startup and that all the 2d graphics in the panel is drawn in the right way every time a graphics object is created via panel.CreateGraphics().
Help would be much appreciated!
Regards! / Mikke
|
|
|
|
|
GDI and GDI+ all use an axis with the origin in the upper-left corner. This has always been the case. DirectX and I assume OpenGL (never worked with it) use the lower-left corner unless you transform the point of origin.
The painting code will just have to be changed. You should encapsulate this in a derivative class of the Panel you should make, rather than doing the drawing outside the Panel that is responsible for showing the graphics. Encapsulation is a major feature of OOP.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
ok, thank you! I thought it might be like that, but wanted to be sure.
I have used a OOD doing the class hierachy and have encapsulated all the important features. Altough some of the functionallity has been placed outside the class because some of components in the application are drawing some graphics om the panel, mainly debug information.
Looks like I will have to do some changes in the painting routines then..
/ Mikke
( by the way, I think that openGL uses upper right corner too. If I remember correctly, I have not used it in a while.. )
|
|
|
|
|
Hi,
I searched the web. I can find how to export data for Excel 2002 or later.
But how to do for Excel 2000 ?
Thanks
Wilson
|
|
|
|
|
Instead of trying to export to Excel, just export to a CSV (comma-separated values, or comma-delimited text file). Excel and other applications can open these with no problem. Just be sure to quote your strings that contain commas in them, which isn't hard and there are articles to assist you.
To note, though, the typelib for Excel hasn't changed much since Excel 97. The base functionality is the same - as all good COM libs should. Chances are whatever works for Excel 2002 will work for Excel 2000, but you should use the Excel 2000 typelib for Excel 2000 and later since the class IDs and interface IDs (GUID s) should be the same throughout new versions (new interfaces are added and the old classes implement those, but the old interfaces are typically still implemented). Please note that this is usually the case, but things do get deprecated, though the functionality you require is pretty basic so you should be fine.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
hi ,,,,
I would like know what is the equivalent of SetItemData and GetItemData of MFC, listCtrl in C# listview ?
Any help would be greatly apprecaited.
Thanks in advance
saleem
|
|
|
|
|
Setting:
listview.Items.Add("aaaa");
listview.Items[index].SubItems.Add("bbbb");
Geting:
listview.Items[index]
Mazy
"One who dives deep gets the pearls,the burning desire for realization brings the goal nearer." - Babuji
|
|
|
|
|
Hi...
Thanx for the response.
But I think my question is not very clear.
In MFC what happens is that when we are adding data in the list, we usually call 'InsertItem'. And to associate a unique number to the added row we call 'SetItemData', so that we can get the correct row number when a row is selected by calling 'GetItemData'.
I would like to know what is the equivalent of this in C# .NET ?
Thanks in advance
saleem
|
|
|
|
|
I just wanted to note that MFC's CListCtrl actually encapsulates the same common control as ListBox in .NET (not C#, by the way, which is only a language that can use the .NET FCL and compiles to IL like all other managed languages), where MFC's CListView encapsulates the same common control as ListView in .NET (though CListView is also a CView derivative and works a little differently being a view).
What Mazdak said is still basically what you do, except that with the default ListBox.Items collection property there is no SubItems property since ListBox.Items is only an ListBox.ObjectCollection (nested class) that contains a collection of object . If you want to chance this, extend ListBox and override the protected CreateItemCollection to return a derivative of ListBox.ObjectCollection - don't try to override ListBox.Items since you can't (it's not virtual, so all you can do is hide it which leads to problems when refering to the object as it's base class, ListBox ).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi...
Thanx for the response.
But I think my question is not very clear.
In MFC what happens is when we are adding data in the list, we usually call
'InsertItem'. And to associate a unique number to the added row we call 'SetItemData', so that we can get the correct row number when a row is selected by calling 'GetItemData'.
I would like to know what is the equivalent of this in C# .NET ?
Thanks in advance
saleem
|
|
|
|
|
Well, you could start by reading the documentation for the ListBox . How do you think the regulars here learn? IntelliSense? Get real.
A ListBox takes any object, so you could design a class like so:
public class DataItem
{
private int key;
private string name;
public DataItem() : this(0, null)
{
}
public DataItem(int key, string name)
{
this.key = key;
this.name = name;
}
public int Key
{
get { return key; }
set { key = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
} Add that to a ListBox :
listBox1.Items.Add(
new DataItem(1, "Test 1")); If you want to refer to it later (only works for references types):
DataItem data = listBox1.Items[0];
data.Name = "Something new"; Since it's a reference type, the Name of the referenced DataItem is changed. If you want to be able to refer to the key using ListBox.Items , then you have to extend the class and override key methods, which you can find out in the documentation.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi...
Thanx for the response.
But I think my question is not very clear.
In MFC what happens is that when we are adding data in the list, we usually call 'InsertItem'. And to associate a unique number to the added row we call 'SetItemData', so that we can get the correct row number when a row is selected by calling 'GetItemData'.
I would like to know what is the equivalent of this in C# .NET ?
Thanks in advance
saleem
|
|
|
|
|
Hi,
i am kind of building an application (somewhat like Outlook express) which retrieves messages from Pop3 server..
but the retrieved message have alot of other information (i believe it is called HEADER INFORMATION)... my question : IS there any way to strip this header information...
any help will be appreciated
thanx in advance
|
|
|
|
|
|
Are you talking about the SMTP headers for the email? You don't discard it - you use it. That contains the To:, From:, Subject:, and Content-Type: headers, along with other headers that may or may not be useful to you. This is partly how email travels throughout the 'net (though the TO and most often the FROM - except for those mail servers that don't authenticate the sender, commonly used by spammers! - are also handled by the SMTP protocol regardless of the headers).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Does a control exist where I can load it with any number of images (one on top of the other) and then vertically scroll through them for viewing?
My images will all be the same width but not the same height.
I was thinking to host a webpage in my app and have local tags for the images but I don’t want the overhead. Any other ideas you would be great to have.
Thanks!
|
|
|
|
|
This would be a simple owner-drawn ListBox , for which several articles on this site already cover what you need to do (or alternatives, at least). Read ImageListBox - exposing localizable custom object collection as a property[^]. If covers a few things you didn't mention requiring, but the source will give you an idea.
Basically, you just set DrawMode to DrawMode.OwnerDrawVariable (since they could be different heights, as you mentioned), and handle both the MeasureItem and DrawItem events.
If you would actually be better, however, to extend ListBox with your own implementation (perhaps something like ImageListBox ) that overrides the DrawMode property (always returns DrawMode.OwnerDrawVariable but does nothing or throws a NotSupportedException or something in the set accessor) and the OnMeasureItem and OnDrawItem methods (don't forget to call the base class's implementation so that events are fired). This is a far better approach because you won't have to implement all this code again every time you want to have an ImageListBox -like control, and overriding methods is faster than handling events. It's all about encapsulation.
Microsoft MVP, Visual C#
My Articles
|
|
|
|