|
Hi gurus,
I would like to know if there is an event BEFORE the Resize event?
I would like to get the window location (this.Location ) just before the window state (this.WindowState ) changes from FormWindowState.Normal to FormWindowState.Maximized or FormWindowState.Minimized .
When the Resize event is raised, the this.Location has already changed to the new one. I would like to get this value (this.Location ) before it is changed.
Thanks.
Best regards.
There is no spoon.
|
|
|
|
|
You have to override WndProc , handle the WM_SIZING (0x0214) notification message, and set Message.Result to new IntPtr(1) (TRUE ) in order to cancel it.
If all you want to do is prevent resizing, set the FormBorderStyle to FormBorderStyle.FixedDialog and set the MaximizeBox and MinimizeBox properties to false . These are all properties on the Form .
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi Heath,
I don't want to cancel the Resize event, I want to save the Location of the window before the Resize event is raised.
I'm going to try to handle the WndProc method as you said.
Thanks.
There is no spoon.
|
|
|
|
|
WEll, the problem with using the WM_SIZING message is that it is fired continuously as the window is being resized. So now you have to set a flag when the first WM_SIZING message hits you so you don't coninuously save the Location of the window as it's being resized. I can't remember off the top of my head, but I think after the user let's go of the mouse, you'll get a WM_SIZE (not WM_SIZING) message with the final dimensions of the client area of the window. You might be able to use that message to reset the flag you set under WM_SIZING... I THINK!
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I have to handle the WndProc and the WM_SYSCOMMAND message.
how can I define constants in C# like
#define SC_MINIMIZE 0xF020
#define SC_MAXIMIZE 0xF030
thanks.
There is no spoon.
|
|
|
|
|
Just delcare them as constants:
private const int SC_MINIMIZE = 0xF020;
private const int SC_MAXIMAIZE = 0xF030;
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
ok, it works now thanks!
There is no spoon.
|
|
|
|
|
Just an idea. Wouldnt it have worked if you saved the window location when the program starts. Then in the resize event you save the new resized location. So everytime the resize event happens you can access the data from the previous resize.
|
|
|
|
|
Hi,
I would not do that. One possible way I have done is the following:
- 1) when loading
* a) initialize the default value of the state, size, location of the window
* b) try to read values from the saving location (ini file, xml file, registry...)
* c) if succeed to read the values, assign these values to the current window
- 2) when closing
* a) save the state of the window to the saving location
* b) if the window is not minimized or not maximized (set to normal),
save the current size and location to the saving location
else
save the size and location that was read just before maximize or minimize.
to save the size and location of the window just before being maximize, as Heath suggested, I override the WinProc method and processed the WM_SYSCOMMAND message if the WParam of the WM_SYSCOMMAND is SC_MAXIMIZE or SC_MINIMIZE then we save the size and location of the window before calling the base.WinProc method.
And it works just fine.
This is the usual way in C++, so it's the same logic in C#.
Best regards.
There is no spoon.
|
|
|
|
|
Why the following code throws System.Management exception on windows 98?
------------------------------------------------------------------------------------
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");
------------------------------------------------------------------------------------
though i have added the following namespaces at the befining of the form
using System.Management;
using System.Management.Instrumentation;
please guide
|
|
|
|
|
|
Thanks Mr. Heath
I am trying to fetch the name, port name, status and comment of all installed printers using WMI, it works fine on WindowsXP, but not on Windows 98, as you pointed out correctly, WMI was not installed on later machine.
Is using of WMI the standard way of getting above properties? Or there is any other way that can work better on all Microsoft Operating systems.
please guide
|
|
|
|
|
There's no "standard" way, and WMI is a lot easier to use in .NET than the alternatives, which would require P/Invoking several native functions and may not be consistent between Windows- and Windows NT-based operating systems. I'd stick with WMI if I were you.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have a MDI application frm_parents is the MDI parents with a main menu and shortcut.
When it load, it load MDI Child frm_login.
It's basicaly a login frame that I've created.
I would like to create a code where when frm_login is still active, no other command (mouse or shortcut) can be used.
I made a active flag (frm_login_activated). It's equal to true when frm_login is loaded, and false when frm_login is closed.
Does anyone know how to do it?
Thank you very much in advance.
|
|
|
|
|
Why would you make the login form a child form? Why not make it a normal dialog form and show it, from your main form, with .ShowDialog(). This way, the form is displayed as a modal dialog, you can't use the underlying main form until this dialog is OK'd or Cancel'd, and you can get the return value from the form so your main code knows weather or not the user logged in and can take appropriate action.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Yes, you are right.
I didn't think about that one
It worked perfectly. Thanks a lot
|
|
|
|
|
1-hi...
2-make an instance of chlid form in the parent form
fchild f2=new fchild();
set the flag that u made it in the child form as public
and write this code in parent form
private bool f1flag;
the menuitem1_click(.......,........)
{
f1flag=f2.f2flag;
if(f1flag==true)
{
f2=new Form2();
f2.MdiParent=this;
f2.Show();
}
else{f2.activate();}
}
....and in child form on the event close set the f2flag=true
and on the f2_load set f2flag=false
hi i am ezak neno
|
|
|
|
|
That's a lot of garbage to go through when all you need for a Login Form is wheather or not the user was successfully logged in or not. I like this in the main form better:
frmLoginForm myLoginForm = new frmLoginForm;
DialogResult loginResult = myLoginForm.ShowDialog();
if (loginResult == DiaglogResult.OK)
{
}
else
{
}
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
i have a com object that returns me a xml string how do i use readxml in a dataset to convert the string to a table
thanks
chad
|
|
|
|
|
DataSet.ReadXml takes a Stream , TextReader (or derivative of each), or a path to a filename as a String . Since you already have the content in a String , a StringReader would be a logical choice:
DataSet ds = null;
using (StringReader reader = new StringReader(xmlString))
ds.ReadXml(reader);
return ds;
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hmm, I like your a little better than mine. Time for bed, I need
- Nick Parker My Blog | My Articles
|
|
|
|
|
cmarmr wrote:
how do i use readxml in a dataset to convert the string to a table
I assume you mean DataTable when you say table. Here is a simple example on how you could do such a thing:
string xml = "<numbers><number>1</number><number>2</number></numbers>";
XmlParserContext context = null;
XmlTextReader reader = new XmlTextReader(xml, XmlNodeType.Element, context);
DataSet ds = new DataSet();
DataTable t = null;
ds.ReadXml(reader);
t = ds.Tables[0];
foreach(DataRow row in t.Rows)
foreach(DataColumn col in t.Columns)
Console.WriteLine(row[col]);
- Nick Parker My Blog | My Articles
|
|
|
|
|
I want to disable one of the items (checkBox) of the
checkedlistBox.
how can i do that
AH_Eng
|
|
|
|
|
I don't know how to disable an Item in a checkbox, but you can remove the Item by it's handle on an event.
_____________________________________________________
Believe! Every thing has a purpose
|
|
|
|
|
Imho there is no direct way to do this, but you could make an owner-drawn checkedlistbox out of it (this.DrawMode = DrawMode.OwnerDrawFixed; ). Then you would have to override OnDrawItem and draw the item yourself.
This could look like the following
<br />
protected override void OnDrawItem(System.Windows.Forms.DrawItemEventArgs e)<br />
{<br />
e.DrawBackground();<br />
e.DrawFocusRectangle();<br />
Color textColor = e.ForeColor;<br />
if (ShouldBeDisabled(e.Index)) <br />
textColor = Color.Grey;<br />
<br />
e.Graphics.DrawString(Text, e.Font, new SolidBrush(e.ForeColor), <br />
e.Bounds.Left, e.Bounds.Top);<br />
}<br />
|
|
|
|