|
But there's just two values. True or false..How can I change the ContextMenu.
Or how can I add something to the ContextMenu??
thx
|
|
|
|
|
|
Hi!
Unfortunately, you can't do this with built-in properties.
You'll have to use P/invoke and override WndProc, but that's not too hard and works well.
There's even an article here on CP: Customizing WinForm's System Menu[^]
Best regards from Germany as well
mav
|
|
|
|
|
That is exactly what I'm looking for!
|
|
|
|
|
does any one know how to workaround the memory issues with the tree view web control.
|
|
|
|
|
1. What memory issues? (link would help)
2. What is the tree view web control? (link would help)
Any remotely useful information on my blog will be removed immediately. There are 10 kinds of people in the world. Those who have heard of the ubiquitous, overused, worn-out-like-an-old-shoe binary "joke" and those who haven't.
Judah Himango
|
|
|
|
|
3. Why are you posting here? Questions about ASP.NET development - despite what language you're using unless it's a language-specific problem - belong in the ASP.NET forum.
If you're referring to the Microsoft IE TreeView[^] you may have better luck in the Internet Explorer Web Controls[^] forum on http://asp.net[^], which exists soly for support of the IE WebControls.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
|
does any one know how to workaround the memory issues with the tree view web control.
|
|
|
|
|
I can create a singleton class that shares a single of a class within a application.. does anyone know how to approach sharing between application. Would I have to use serilzation to achieve this.. does anyone have examples..
Sk8tZ
|
|
|
|
|
Sharing between applications -- sharing a variable across applications? If this is the case, and both applications are .NET apps, you should look at .NET remoting (System.Runtime.Remoting). What you would do is extract an interface from the class you want to share. Give that interface to both applications. Have the class you want to share implement that interface and inherit System.MarshalByRefObject or be [Serializable]. Then from application with the shared class, call RemotingServices.Marshal(mySharedClassInstance, ...) and have the other application call RemotingServices.Connect(...) which will return the shared object. Cast it to the interface your previously created and VOILA, you've just shared a class instance across application boundaries.
Any remotely useful information on my blog will be removed immediately. There are 10 kinds of people in the world. Those who have heard of the ubiquitous, overused, worn-out-like-an-old-shoe binary "joke" and those who haven't.
Judah Himango
|
|
|
|
|
See I want to make a bar that behaves like a splitter bar and yet leave no frames.For example I made a panel and dock it to the left.then a splitter bar docking to left.Then another panel dock set to fill.Now the problem is when i moved the splitter bar it leaves frames of itself(one trailing with the mouse and the other stayed back at the original position).But I don't want those frames.Is there any way to do this.
Thanks in advance.
just.starting...
|
|
|
|
|
Write your own splitter bar, or whenever the user is dragging the splitter, set the splitter position. FYI, there is a new splitter control in .NET 2.0 called a SplitContainer that supplants the current splitter control.
Any remotely useful information on my blog will be removed immediately. There are 10 kinds of people in the world. Those who have heard of the ubiquitous, overused, worn-out-like-an-old-shoe binary "joke" and those who haven't.
Judah Himango
|
|
|
|
|
Hi,
I'm using the P/Invoke mechanism to call an unmanaged C function, "CAPI_InitMaria", inside a 3rd party DLL. This function can be given a callback function, which is to be called during execution of CAPI_InitMaria.
Initially, this works fine: I can call the "CAPI_InitMaria" function from C#, after which the C# callback function (a delegate, see below) is called as well. Its argument (a GUID) also looks fine. However, after the callback method exits, I'm always getting an exception:
An unhandled exception of type 'System.NullReferenceException' occurred in MariaTestCSharp.exe
Additional information: Object reference not set to an instance of an object.
Doing the same in plain old C++ (VC++ 6.0) does not generate any problems. Also, if I specify 'null' instead of a callback function, everything works fine.
In C#, I call the CAPI_InitMaria function like this:
public class Form1 : System.Windows.Forms.Form
{
...
public delegate int OnStartCallback( ref Guid GUID );
private OnStartCallback myCallback;
[DllImport("Maria.dll")]
public static extern int CAPI_InitMaria( IntPtr hWndParent, IntPtr hResource,
OnStartCallback pInitFunction, int nFlags );
public static int OnStart( ref Guid GUID )
{
return 0;
}
private void initMaria_Click(object sender, System.EventArgs e)
{
System.Reflection.Module[] modules =
System.Reflection.Assembly.GetExecutingAssembly().GetModules(true);
instancePtr = Marshal.GetHINSTANCE( modules[0] );
myCallback = new OnStartCallback( OnStart );
CAPI_InitMaria( panel1.Handle, instancePtr, myCallback,
0x0004 );
}
...
}
The exported function and its associated callback types are declared like this in C++ (the procCAPI_InitMaria function is exported in the DLL as CAPI_InitMaria):
typedef int (*procCAPI_OnMariaStartup)( const GUID* pInstanceID );
typedef HWND(*procCAPI_InitMaria)( HWND hWndParent, HINSTANCE hResource,
procCAPI_OnMariaStartup pInitFunction, int nFlags );
Any ideas??
Thanks in advance,
Iwan Littel.
|
|
|
|
|
|
leppie, first of all thanks for your answer.
Regarding your solutions:
1) I already made the delegate instance static (see code in first post), so that solution didn't work
2) Currently, the delegate instance is stored inside a member variable of the Form1 class, which remains alive until the application shuts down. So wrapping the delegate instance in a GCHandle probably has no effect. Do you agree?
Thanks,
Iwan.
|
|
|
|
|
What leppie is referring to is the fact that the managed GC (garbage collector) can move things around, so that if your function calls your callback and it's moved, your unmanaged code (since it is unmanaged) does not know it and, most often, an AV (access violation) exception occurs, which bubbles up into the CLR which can throw a variety of exceptions.
Another problem that can occur is different calling conventions for functions. If that is the case, read one of my previous replies regarding that issue at http://www.codeproject.com/script/comments/forums.asp?msg=931771&forumid=1649#xx931771xx[^].
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Heath, thanks for the reply.
I don't think my callback function is moved by the garbage collector, because it IS being called during the call to CAPI_InitMaria. The exception always occurs AFTER my callback function has been called and after it has exited successfully.
The calling convention issue was also my initial thought. However, I don't have any problems in VC++ (which uses the standard C++ calling convention). So I don't think I need to specify another calling convention in C#.
A colleague of mine came up with the following: It might be that the (3rd party) DLL we are calling starts up another thread, which calls the callback function (i.e. the C# delegate). Could this be the cause of the problem, and if so what could be done about it?
Thanks,
Iwan.
|
|
|
|
|
It could be, but you should still pin the delegate in memory. This is good practice for any reference type whether it's a problem or not now. This is really only necessary for long-lived delegates, however, since if you're passing the delegate to your native function only for that call you should be safe. The fact that you declared it as static also helps, but may not be the best design idea.
If the third-party DLL is creating a new thread (and you could find this out easily using Thread.Name or - lacking any names - store some test data in TLS (see Thread.AllocateNamedDataSlot ), it really depends what your delegate is doing. If you're updating controls you need to update them in the thread on which they were created. This means using Control.InvokeRequired to determine if you need to invoke the method on the thread, then Control.Invoke to actually invoke the method. If you need to set a property create a proxy method to set the value. Through reflection you can also get a MethodInfo for the property's set accessor.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
I finally found the problem myself after creating my own unmanaged C++ DLL. This DLL contained the above callback typedef and a stub CAPI_InitMaria() function that simply called the given callback.
The problem was in the DLL's callback method typedef: the MSVC compiler seems to default to a non-"stdcall" calling convention for callback functions. It should have been
typedef int (__stdcall *procCAPI_OnMariaStartup)( const GUID* pInstanceID );
After I changed this in my C++ stub DLL, everything worked like a charm. But of course, I can't do that in the original 3rd party DLL.
I also saw that .NET's PInvoke doesn't seem to support callback functions with a non-stdcall calling convention. So it seems I'm forced to write a second C++ DLL containing a "relay" function and callback for every used function that needs a callback (and yes, there are a LOT! )
Does anyone perhaps know a better workaround for this??? If so, please let me know! It would really save me a HUGE amount of work.
Thanks,
Iwan.
|
|
|
|
|
I am trying to set the grouping / sorting fields at run-time from C#.NET against a Crystal Report.
I'm using the code as provided in the help files using syntax like :
FieldDefinition FieldDef = new FieldDefinition();
FieldDef = Report.Database.Tables[0].Fields["FieldName"];
Report.DataDefinition.Groups[0].ConditionField = FieldDef;
I have the appropriate 'using' set up (for CrystalDecisions.CrystalReports.Engine.FieldDefinition.FieldDefinition()).
When I attempt to compile this code I am presented with a build error suggesting that :
'CrystalDecisions.CrystalReports.Engine.FieldDefinition.FieldDefinition()' is inaccessible due to its protection level'.
I've followed / copied the code sample as suggested within the help files.
Where have I gone wrong / what am I missing ?
Thanks in advance.
|
|
|
|
|
Hi,
Iam getting this error if i compile a project.
error BC31019: Unable to write to output file 'F:\VISTA_EXPRESS\sourcecode\VistaExpressUtil\obj\Debug\VistaExpressUtil.dll': The process cannot access the file because it is being used by another process.
The sln consists of many projects and there are being referenced using Project reference rather than file references, but still the problem.
I tried restarting the system, but still the problem is there.
Any help will be greatly appreciated.
Thanx
saleem
|
|
|
|
|
In one of my solutions (I think it consists of about 25 projects) I also have this problem. Ive even discovered that in this particular case the problem only arises in Release but not in Debug mode. My workaround is to switch the property "Local Copy" (right click the reference and click properties to find it) of the referenced dlls to false. I make this in every project for every Reference where the error occurs. A little problem with this workaround is that sometimes (dont know when it happens exactly) the final output is not 100% up to date. So you should check the output by yourself after doing this.
|
|
|
|
|
Hi Robert,
Iam getting this problem in the debug mode itself.
It's a form application with 20 project references.
Is there any other info u can provide ??
saleem
|
|
|
|
|
I think i got a work around to the problem. Earlier all my binaries output were in the local view of the VOB (Versionised object base). If the output is directed to a folder in the Hard disk ( say, C:\myfolfer\bin), the problem does not occur.
Hope anyone else need not spend time and effort as i did.
Regards,
Saleem
|
|
|
|