|
Hi
thanks for your post.
I'll be very interested on your article about tab control (I'll have to work on this problem in a few day).
About the problem of reducing the displayrectangle of my control. I tried the first point you saied
Curtis S. wrote: 1. Override the DisplayRect to return the amount of area that you want the client to use.
The result is :
public override Rectangle DisplayRectangle {
get {
Rectangle rec = base.DisplayRectangle;
return new Rectangle(
rec.X+(int)this._epaisseurBord,
rec.Y+(int)this._tailleBarTitre,
(int)(rec.Width-this._epaisseurBord*2),
(int)(rec.Height-this._tailleBarTitre-this._epaisseurBord));
}
}
(sorry for the french name of my properties )
The problem is I have no result. The breakpoint i used in debug mode show that this property is nerver acces.
At the end controls like button or label appear where ever they want on all the surface of my control.
The other point you told me are much more for a tabcontrol I think because the goal of my control is to have no control on it but can receive some.
Do you have an idea about why that doesn't work ???
Thanks for all
-- modified at 4:39 Saturday 17th December, 2005
|
|
|
|
|
That property will not get used unless the child has some kind of Dock style other than DockStyle.None . Unfortunately, that solution that I gave to you only works if all steps get done. Sorry. It was the only way that I could find to do what we both wanted.
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
Thank you very much.
I will try with a child panel with it dockstyle at fill. I hope that won't reduce the executive time.
I will told you if I find an other solution.
With the pleasure to read your artical very soon
|
|
|
|
|
|
Hi,
I sent the same post on the MSDN's forum and received an other way of doing what we both wanted. I didn't try it for the moment but wanted to keep you informed.
You can follow this URL : http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=172709&SiteID=1[^] to see the entire conversation but this is the answer of Jelle van der Beek.
"The zone in which components cannot be dropped is called the non-client area. There is no support in the .NET framework for the non-client area, but you can still control it by overriding the WM_NC* messages. Here is a piece of sample code that will set the non-client border to 10 pixels wide."
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Runtime.InteropServices;
namespace Foo
{
public class SomeControl : Control
{
public SomeControl()
{
SetStyle( ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint, true );
}
protected override void WndProc( ref Message m )
{
switch( m.Msg )
{
case 0x0083:
if( m.WParam == IntPtr.Zero ){
RecalcNonClientArea( m.LParam );
}
else
if( m.WParam == new IntPtr(1) ){
RecalcNonClientArea( m.LParam );
}
break;
case 0x0085:
IntPtr hDC = WinApi.GetWindowDC( m.HWnd );
if( hDC != IntPtr.Zero ){
using( Graphics maing = Graphics.FromHdc(hDC) ){
}
WinApi.ReleaseDC( m.HWnd, hDC );
}
m.Result = IntPtr.Zero;
break;
}
base.WndProc( ref m );
}
private void RecalcNonClientArea( IntPtr lParam )
{
WinApi.NCCALCSIZE_PARAMS csp;
csp = (WinApi.NCCALCSIZE_PARAMS)Marshal.PtrToStructure(
lParam,
typeof( WinApi.NCCALCSIZE_PARAMS ) );
csp.rgrc0.Top += 10;
csp.rgrc0.Bottom -= 10;
csp.rgrc0.Left += 10;
csp.rgrc0.Right -= 10;
Marshal.StructureToPtr( csp, lParam, false );
}
}
}
I hope that will help you...
All the best.
|
|
|
|
|
Cool, thank you very much! Happy coding.
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
Hi
I used "System.Reflection.MethodBase.GetCurrentMethod().DeclaringType" in VB.NET to get the type of current class. But, if I try to use the same code in C#, it gives "class was expected" error and does not compile.
What is the equivalent of "System.Reflection.MethodBase.GetCurrentMethod().DeclaringType" in C#?
Please advice. Thanks
Pankaj
|
|
|
|
|
Have you added the required assembly reference?
|
|
|
|
|
yupp.. its fully qualified path.
|
|
|
|
|
pankazmittal wrote: yupp.. its fully qualified path.
I don't mean the namespace. The reference to the assembly containing that class.
|
|
|
|
|
Nishant Sivakumar wrote: I don't mean the namespace. The reference to the assembly containing that class.
Never mind, it's in mscorlib, so that's not an issue here!
|
|
|
|
|
I just compiled this code in C# 1.1 and it compiled and ran okay.
class A
{
public static void Main()
{
System.Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
}
|
|
|
|
|
Thanks Nishant. It works now.
private static Type thisClassType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
private static readonly ILog logger = LogManager.GetLogger(thisClassType);
I beleive System.Reflection comes from System.dll
Pankaj
|
|
|
|
|
pankazmittal wrote: I beleive System.Reflection comes from System.dll
MethodBase is in mscorlib.dll
|
|
|
|
|
|
I have a class in C# that inherits from PrintDocument, generates a document and there is no problem to preview it and print it in .NET, but the printing functionality of the component to which this class belongs needs to be called from VB6 too, how is it possible to preview and print the PrintDocument in VB6??
Thanks in advance
Isaac B
|
|
|
|
|
Hi ...
I only want to remove the FIRST "ma" but it appears that i must use a string method on a copy of a StringBuilder variable in order to execute the Remove method of StringBuilder.
string pat = "ma";
string dictWord = "Wrestlemamania";
StringBuilder w = new StringBuilder();
w.Length = 0
w.Append(dictWord);
int result = dictWord.IndexOf(pat); // Why must i look at a STRING variable
dictWord = dictWord.Remove(result, 2); // in order to do THIS
w.Remove(result, 2); // using a StringBuilder variable?
I can't find the equivalent "IndexOf" in the StringBuilder methods. How would this be done using StringBuilder? What am i missing?
Thanks.
|
|
|
|
|
You're doing this the hard way. All you need to do is find the position of the first occurance of "ma" in the string, then call the Remove method on that string, supplying the starting position and how many characters to remove, which will return a new string.
string pat = "ma";
string dictWord = "Wrestlemamania";
int pos = dictWord.IndexOf( pat );
dictWord = dictWord.Remove( pos, pat.Length );
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Yes ... you are correct, however, the question was not whether it could be done with STRINGSs, but rather how to do it with STRINGBUILDER. In fact, i am currently using STRINGs ... precisely as you describe.
The problem occurs when you have hundreds of thousands of these things to do ... performance becomes important ... and i wondered if i could speed things up if i could avoid CONSTRUCTING the resulting millions of intermediate strings needed in the complete solution.
IMHO, the need to create a STRING negates most of the value associated with using STRINGBUILDER ... in fact, it makes matters worse.
I only showed part of the problem ... the part that was perplexing: the lack of an "IndexOf" method for STRINGBUILDER.
|
|
|
|
|
IceWater42 wrote: the part that was perplexing: the lack of an "IndexOf" method for STRINGBUILDER.
There is no "IndexOf" because a StringBuilder treats the string as an array of characters. There is no way to tell what the first occurance of a string is because you can't compare a string to an array of characters. It could be done with custom coding to comparision, but the performance hit in this code would more than likely be worse than rebuilding the string using string objects.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
StringBuilder is for building strings, not examining them.
Instead of string manipulation like this, you might want to look at System.Text.RegularExpressions
Tech, life, family, faith: Give me a visit.
I'm currently blogging about: Bought a House!
Judah Himango
|
|
|
|
|
Let's say I have an application running with a button on it. When I press that button, it launches an application (say MS Paint for example). But I want that application to be a child of my application (if you press minimize, for instance, the MS paint would be minimized as well).
Is there a way of doing this in C#?
|
|
|
|
|
Like an MDI Child?
Windows doesn't support it.
Now, if that application were to be launched as a seperate process without any care if it shows up in it's own normal window, then you could keep track of the process, get it's main window handle and send the appropriate Window messages to it to get it to minimize and restore itself when your app is minimized.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
-- modified at 12:41 Friday 16th December, 2005
|
|
|
|
|
In C# 2005 if you put an ErrorProvider onto a form, between the form's controls' (eg. a TextBox) properties an "Error on errorProvider1" item appears. How does this work and how can I make my own class to behave like an ErrorProvider?
|
|
|
|
|
The ErrorProvider works by implementing the IExtenderProvider interface. You can find MSDN documentation on the IExenderProvider interface here[^]. Also, I would recommend James T. Johnson's article[^] here on CP covering the topic as well.
|
|
|
|