同时拖动2个无边框表单

时间:2018-01-18 09:56:54

标签: c# forms winforms mouseevent

我已经在Stack和互联网上阅读了很多关于如何在.net中移动无边框表单的评论

我遇到的解决方案是两个。 1)使用winapi功能 2)处理mousedown / move / up事件。

我已经使用winapi调用实现了移动表单,但是在我的项目中,在主表单下面还有第二个,(日志表单,记录有关用户和程序本身的事件)。 此日志表单实现为滑动菜单,如果用户单击特定按钮,日志表单将向下滑动并显示在主窗体的底部中间。

我已尝试过两种方式,但我无法实现例程,如果日志表单打开,每当我拖动主表单时,日志表单必须跟随附加。

我尝试了什么: (为了简单起见,我省略了一些关于检查日志表单是否显示的标志等等。我只想了解为什么我不能移动日志表单)。 dlls import和const声明都是正确的。

private void headerPanel_MouseDown(object sender, MouseEventArgs e)
    {   
    //this is the event in the mainForm.cs, which handles the mainForm drag, header panel is a little panel on top of the borderless mainForm
        if (e.Button == MouseButtons.Left)
        {
            ReleaseCapture();
            SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); 


            //using the logger form handle, and issue the same command doesn't work
            SendMessage(Log.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
        }
    }

我还尝试了mouseDown / Up / Move事件,mouseDown / Up设置了一个标志,鼠标移动了

private void headerPanel_MouseMove(object sender, MouseEventArgs e)
{   
    if(isDown)
    {
        log.Position = new Point(//X, Y values here)
    }
}

使用这个解决方案,只有当我释放鼠标按钮时,logPanel才会更新它的位置,我尝试放置log.Refresh()/ Invalidate(),因为我认为没有足够的时间重绘所有表单,但它没有'工作,并使用可怕的thread.sleep(10),以允许它重绘不起作用。

有什么线索我该怎么办?或者我在这里做错了什么?

0 个答案:

没有答案
相关问题