i have an application that i am trying to 'port' to be more usable by accessing properties via the prop grid in VS IDE.
i have a function in my component that needs two callback functions (which the component provides delegates for) which it calls in the owning application to get/set a string in that application, how can i allow the programmer to select these functions through the property grid?
if i set the type of the property to the delegate, the propertygrid makes it readonly.
i have provided sample bare code to illustrate the calling applications functions
i would like to move the delegate declarations into designer generated code.
this.updater1.GetProductVersionFunction = new AutoUpdate.UpdateClient.GetVersionString(GetApplicationVersion);
this.updater1.SetProductVersionFunction = new AutoUpdate.UpdateClient.GetVersionString(SetApplicationVersion);
// returns current app version from somewherereturn"version";
// set app version string here
UITypeEditor is the answer. For every type you can define an editor which should be shown when it is edited in the property grid. Normally the property grid resolves one of the inbuilt ones which can edit the type but in case of a delegate it just doesn't find one. So you have to built one on your own. In general you 'just' have to inherit from UITypeEditor and mark the delegate with this class (Editor attribute)). This can become very tricky. I would recommend to use Reflector to look at one of the inbuild editors (DockStyle and DockEditor are probably a good one to start). You could also look into this[^] because it deals with this topic.
Edit: To be honest I never tried this with a delegate. I hope there are no limitations in regard to this. If yes you would have to provide a wrapper class for the delegate.
Not to sure, but I think the property grid relies on the existance of a System.ComponentModel.Design.IEventBindingService service. To do that u need to:
1. Implement the interface yourself.
2. Add it to the IServiceProvider
NOTE: if u doing this at runtime, then you will likely need to provide all the design time services yourself.
I want to make a program that can create and unpack a encoded '.rar' or '.zip' document.
I have found a dll to download from rarlab.com, but it will not allow to unrar files with password.
Does anyone know where an good article about using the encoded '.rar' and '.zip' documents, or does anyone know where to get a freeware dll which already contain the functions with pack and unpack files with password.
I am using Microsoft.Web.UI.WebControls.TreeView control in my application.
I am able to add new nodes and child nodes to it, but the problem i am facing is that i always get the selected node id as 0, i.e the id of the first Node.
All events have been written for it, autopostback property set to true, but am not able to access the selected node id. Even the event for the selectedindexcgange does not fire.
Due to this i am able to add child nodes only to the first parent node.
I am using a right context menu, and on right click on a particular Parent or child node, different operations like Add child node, rename and delete can be performed on it.
All this can be accomplished once i get the selected node id.
Can anyone please tell me as to how to proceed with this?
I have a progressbar showing the progress of background operation , when i browse through other application and return to mine , the form takes time to redraw itself infact it is redrawn only when the progress is completed.
I went through various sites and found that this problem in delphi can be solved by using..Application.ProcessMessages...Any ideas do it in c#.
yeh with backgroundworker everything is fine....
wat I m trying is just a "for" loop whose value goes to progressbar.value using thread..then thru invoke function of threads...showing the progress in progressbar but while progressbar is working and u browse other application the windows form of mine take time redraw it self (it does not response from user)..want to make form responsive even if progressbar is functioning
If the operation is really done in a separate thread and the GUI thread isn't blocked otherwise this shouldn't occur. You should first check if you are really using your threads correctly and if the main thread is working on something.
Other than that (as already suggested) you can use Application.DoEvents() to make your form redraw. But be careful not to call this too often (with 'often' I mean many times per second) as it might reduce performance.
ASP.NET code is not run using your user acount (why would it), but a special account. The name of the accound depends on the version of IIS, but it's normally ASPNET or IIS_WPG. You have to grant permission to the file for this account.