Problem with hosted form within form

L

Lloyd Sheen

I have the following situation:

Need a user resizable user control. After much trying with user control I
came across the idea of hosting the controls in a form marked as not
TopLevel = false. This work fine for most cases, allowing the user to
resize the form (and controls within the form.

The forms them selves are create dynamically when the user drags a node from
a listview to a panel (contained in a Usercontrol which is hosted by the
main form. The location of the from once dropped is at the point where the
mouse was when the control was dropped.

The form itsself hosts a top panel with a label and text box (docked top),
and a CheckListBox docked Fill. Now all the above works fine. The Panel
upon which the controls are dropped is marked as AutoScroll true. Dropping
the "Forms" on the control seems to set the AutoScollMinSize correctly. I
can move the "Forms" around on the Panel and the scrollbars respond to that
movement.

Now the problem:
If I drop the form such that the entire CheckListBox does not show, and then
attempt to click one of the list items (CheckListBox is CheckOnClick = True)
the form will jump on the panel to attempt to show the entire CheckListBox,
the item checked will be incorrect.

If I move the dropped form with the mouse horizontal (CheckListBox is still
not entirely visible) this will sometimes stop the auto move (not from my
code) but not always. If I enter text into the TextBox there is no weird
movement.

I will put the call stacks in a response to this message so that only people
who are interested will have to download them.

Lloyd Sheen
 
L

Lloyd Sheen

Note that first call stack is for form which does not have CheckListBox
showing entirely. The first event caught is the "phantom" move attempting
to click a CheckListBox item. Note the second line of the call stack which
is a OnMove ? Much further down is the WmMouseDown message. The call stack
for the same situation with a CheckListBox showing entirely after the drag
drop is shown at the end of this message.


sqlserver.dll!QueryBuilder.QBFormChangeLocation(Object sender =
{QueryTableView}, System.EventArgs e = {System.EventArgs}) Line 262 Basic

system.windows.forms.dll!System.Windows.Forms.Control.OnMove(System.EventArg
s e = {System.EventArgs}) + 0x5e bytes

system.windows.forms.dll!System.Windows.Forms.Control.OnLocationChanged(Syst
em.EventArgs e = {System.EventArgs}) + 0x1c bytes
system.windows.forms.dll!System.Windows.Forms.Control.UpdateBounds(int x =
352, int y = -13, int width = 216, int height = 288, int clientWidth = 208,
int clientHeight = 261) + 0xb3 bytes
system.windows.forms.dll!System.Windows.Forms.Control.UpdateBounds() +
0x150 bytes

system.windows.forms.dll!System.Windows.Forms.Control.WmMove(System.Windows.
Forms.Message m = {System.Windows.Forms.Message}) + 0x1a bytes

system.windows.forms.dll!System.Windows.Forms.Control.WndProc(System.Windows
..Forms.Message m = {System.Windows.Forms.Message}) + 0x654 bytes

system.windows.forms.dll!System.Windows.Forms.ScrollableControl.WndProc(Syst
em.Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x6c bytes

system.windows.forms.dll!System.Windows.Forms.ContainerControl.WndProc(Syste
m.Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x37 bytes

system.windows.forms.dll!System.Windows.Forms.Form.WndProc(System.Windows.Fo
rms.Message m = {System.Windows.Forms.Message}) + 0x2ab bytes

system.windows.forms.dll!ControlNativeWindow.OnMessage(System.Windows.Forms.
Message m = {System.Windows.Forms.Message}) + 0x13 bytes

system.windows.forms.dll!ControlNativeWindow.WndProc(System.Windows.Forms.Me
ssage m = {System.Windows.Forms.Message}) + 0xda bytes

system.windows.forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallbac
k(int hWnd = 459898, int msg = 3, int wparam = 0, int lparam = 655716) +
0x3d bytes

system.windows.forms.dll!System.Windows.Forms.ScrollableControl.SetDisplayRe
ctLocation(int x = 0, int y = -171) + 0x2c4 bytes

system.windows.forms.dll!System.Windows.Forms.ScrollableControl.ScrollContro
lIntoView(System.Windows.Forms.Control activeControl = {SelectedItem=""}) +
0x3de bytes

system.windows.forms.dll!System.Windows.Forms.ContainerControl.ScrollActiveC
ontrolIntoView() + 0x37 bytes

system.windows.forms.dll!System.Windows.Forms.ContainerControl.ActivateContr
olInternal(System.Windows.Forms.Control control = {SelectedItem=""}, bool
originator = true) + 0x10f bytes

system.windows.forms.dll!System.Windows.Forms.ContainerControl.ActivateContr
olInternal(System.Windows.Forms.Control control = {SelectedItem=""}) + 0x13
bytes

system.windows.forms.dll!System.Windows.Forms.Control.WmSetFocus(System.Wind
ows.Forms.Message m = {System.Windows.Forms.Message}) + 0x94 bytes

system.windows.forms.dll!System.Windows.Forms.Control.WndProc(System.Windows
..Forms.Message m = {System.Windows.Forms.Message}) + 0x747 bytes

system.windows.forms.dll!System.Windows.Forms.ListBox.WndProc(System.Windows
..Forms.Message m = {System.Windows.Forms.Message}) + 0x2a2 bytes

system.windows.forms.dll!System.Windows.Forms.CheckedListBox.WndProc(System.
Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x66 bytes

system.windows.forms.dll!ControlNativeWindow.OnMessage(System.Windows.Forms.
Message m = {System.Windows.Forms.Message}) + 0x13 bytes

system.windows.forms.dll!ControlNativeWindow.WndProc(System.Windows.Forms.Me
ssage m = {System.Windows.Forms.Message}) + 0xda bytes

system.windows.forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallbac
k(int hWnd = 656482, int msg = 7, int wparam = 394312, int lparam = 0) +
0x3d bytes

system.windows.forms.dll!System.Windows.Forms.NativeWindow.DefWndProc(System
..Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0xd4 bytes

system.windows.forms.dll!System.Windows.Forms.Control.DefWndProc(System.Wind
ows.Forms.Message m = {System.Windows.Forms.Message}) + 0x13 bytes

system.windows.forms.dll!System.Windows.Forms.Control.WmMouseDown(System.Win
dows.Forms.Message m = {System.Windows.Forms.Message},
System.Windows.Forms.MouseButtons button = Left, int clicks = 1) + 0x4e
bytes

system.windows.forms.dll!System.Windows.Forms.Control.WndProc(System.Windows
..Forms.Message m = {System.Windows.Forms.Message}) + 0x484 bytes

system.windows.forms.dll!System.Windows.Forms.ListBox.WndProc(System.Windows
..Forms.Message m = {System.Windows.Forms.Message}) + 0xca bytes

system.windows.forms.dll!System.Windows.Forms.CheckedListBox.WndProc(System.
Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x66 bytes

system.windows.forms.dll!ControlNativeWindow.OnMessage(System.Windows.Forms.
Message m = {System.Windows.Forms.Message}) + 0x13 bytes

system.windows.forms.dll!ControlNativeWindow.WndProc(System.Windows.Forms.Me
ssage m = {System.Windows.Forms.Message}) + 0xda bytes

system.windows.forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallbac
k(int hWnd = 656482, int msg = 513, int wparam = 1, int lparam = 1638438) +
0x3d bytes

system.windows.forms.dll!System.Windows.Forms.Application.ComponentManager.S
ystem.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoo
p(int dwComponentID = 1, int reason = -1, int pvLoopData = 0) + 0x349 bytes
system.windows.forms.dll!ThreadContext.RunMessageLoopInner(int reason
= -1, System.Windows.Forms.ApplicationContext context =
{System.Windows.Forms.ApplicationContext}) + 0x1f3 bytes
system.windows.forms.dll!ThreadContext.RunMessageLoop(int reason = -1,
System.Windows.Forms.ApplicationContext context =
{System.Windows.Forms.ApplicationContext}) + 0x50 bytes

system.windows.forms.dll!System.Windows.Forms.Application.Run(System.Windows
..Forms.Form mainForm = {ToadUI.Form1}) + 0x34 bytes
ToadUI.exe!ToadUI.Form1.Main() Line 11 + 0x1d bytes Basic

Call stack showing the the ItemCheck is called in the case where the
CheckBoxList shows entirely after the drag/drop.
sqlserver.dll!QueryBuilder.ItemCheck(Object sender =
{System.Windows.Forms.CheckedListBox},
System.Windows.Forms.ItemCheckEventArgs e =
{System.Windows.Forms.ItemCheckEventArgs}) Line 244 Basic

system.windows.forms.dll!System.Windows.Forms.CheckedListBox.OnItemCheck(Sys
tem.Windows.Forms.ItemCheckEventArgs ice = {Index=2 NewValue=Checked
CurrentValue=Unchecked}) + 0x23 bytes

system.windows.forms.dll!System.Windows.Forms.CheckedListBox.LbnSelChange()
+ 0xfa bytes

system.windows.forms.dll!System.Windows.Forms.CheckedListBox.WmReflectComman
d(System.Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x3f
bytes

system.windows.forms.dll!System.Windows.Forms.ListBox.WndProc(System.Windows
..Forms.Message m = {System.Windows.Forms.Message}) + 0x98 bytes

system.windows.forms.dll!System.Windows.Forms.CheckedListBox.WndProc(System.
Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x66 bytes

system.windows.forms.dll!ControlNativeWindow.OnMessage(System.Windows.Forms.
Message m = {System.Windows.Forms.Message}) + 0x13 bytes

system.windows.forms.dll!ControlNativeWindow.WndProc(System.Windows.Forms.Me
ssage m = {System.Windows.Forms.Message}) + 0xda bytes

system.windows.forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallbac
k(int hWnd = 656388, int msg = 8465, int wparam = 66564, int lparam =
656388) + 0x3d bytes
system.windows.forms.dll!System.Windows.Forms.Control.SendMessage(int msg
= 8465, int wparam = 66564, int lparam = 656388) + 0x48 bytes

system.windows.forms.dll!System.Windows.Forms.Control.ReflectMessageInternal
(int hWnd = 656388, System.Windows.Forms.Message m =
{System.Windows.Forms.Message}) + 0x7f bytes

system.windows.forms.dll!System.Windows.Forms.Control.WmCommand(System.Windo
ws.Forms.Message m = {System.Windows.Forms.Message}) + 0x72 bytes

system.windows.forms.dll!System.Windows.Forms.Control.WndProc(System.Windows
..Forms.Message m = {System.Windows.Forms.Message}) + 0x252 bytes

system.windows.forms.dll!System.Windows.Forms.ScrollableControl.WndProc(Syst
em.Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x6c bytes

system.windows.forms.dll!System.Windows.Forms.ContainerControl.WndProc(Syste
m.Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x37 bytes

system.windows.forms.dll!System.Windows.Forms.Application.ParkingWindow.WndP
roc(System.Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x22
bytes

system.windows.forms.dll!ControlNativeWindow.OnMessage(System.Windows.Forms.
Message m = {System.Windows.Forms.Message}) + 0x13 bytes

system.windows.forms.dll!ControlNativeWindow.WndProc(System.Windows.Forms.Me
ssage m = {System.Windows.Forms.Message}) + 0xda bytes

system.windows.forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallbac
k(int hWnd = 656306, int msg = 273, int wparam = 66564, int lparam = 656388)
+ 0x3d bytes

system.windows.forms.dll!System.Windows.Forms.NativeWindow.DefWndProc(System
..Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0xd4 bytes

system.windows.forms.dll!System.Windows.Forms.Control.DefWndProc(System.Wind
ows.Forms.Message m = {System.Windows.Forms.Message}) + 0x13 bytes

system.windows.forms.dll!System.Windows.Forms.Control.WmMouseUp(System.Windo
ws.Forms.Message m = {System.Windows.Forms.Message},
System.Windows.Forms.MouseButtons button = Left, int clicks = 1) + 0xb5
bytes

system.windows.forms.dll!System.Windows.Forms.Control.WndProc(System.Windows
..Forms.Message m = {System.Windows.Forms.Message}) + 0x49b bytes

system.windows.forms.dll!System.Windows.Forms.ListBox.WndProc(System.Windows
..Forms.Message m = {System.Windows.Forms.Message}) + 0x217 bytes

system.windows.forms.dll!System.Windows.Forms.CheckedListBox.WndProc(System.
Windows.Forms.Message m = {System.Windows.Forms.Message}) + 0x66 bytes

system.windows.forms.dll!ControlNativeWindow.OnMessage(System.Windows.Forms.
Message m = {System.Windows.Forms.Message}) + 0x13 bytes

system.windows.forms.dll!ControlNativeWindow.WndProc(System.Windows.Forms.Me
ssage m = {System.Windows.Forms.Message}) + 0xda bytes

system.windows.forms.dll!System.Windows.Forms.NativeWindow.DebuggableCallbac
k(int hWnd = 656388, int msg = 514, int wparam = 0, int lparam = 2818106) +
0x3d bytes

system.windows.forms.dll!System.Windows.Forms.Application.ComponentManager.S
ystem.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoo
p(int dwComponentID = 1, int reason = -1, int pvLoopData = 0) + 0x349 bytes
system.windows.forms.dll!ThreadContext.RunMessageLoopInner(int reason
= -1, System.Windows.Forms.ApplicationContext context =
{System.Windows.Forms.ApplicationContext}) + 0x1f3 bytes
system.windows.forms.dll!ThreadContext.RunMessageLoop(int reason = -1,
System.Windows.Forms.ApplicationContext context =
{System.Windows.Forms.ApplicationContext}) + 0x50 bytes

system.windows.forms.dll!System.Windows.Forms.Application.Run(System.Windows
..Forms.Form mainForm = {ToadUI.Form1}) + 0x34 bytes
ToadUI.exe!ToadUI.Form1.Main() Line 11 + 0x1d bytes Basic
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top