隐形边界C#

时间:2012-07-10 01:06:52

标签: c# winforms border collision mousemove

好的,我在C#中创建了一个表单。您可以在运行时移动控件(如按钮),可以移动它或图片。无论如何,我想知道你是否有可能制作某种不可见的边框,这样你就无法将控件拖出程序的屏幕。与在Windows中一样,您可以将窗口拖出屏幕区域。我不希望你能够做到这一点,我想看看你是否也可以把它做到你可以在控制器周围制作边框的地方,这样你就不能将它们拖到彼此之上。任何帮助都会很棒!谢谢!

好吧,我正在使用DevExpress DXv2和WinForms。

    private void groupControl2_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            groupControl2.Left += e.X - move.X;
            groupControl2.Top += e.Y - move.Y;
        }
    }

    private void groupControl2_MouseDown(object sender, MouseEventArgs e)
        {
             move = e.Location;
        }

1 个答案:

答案 0 :(得分:0)

您似乎正在使用某种控件组件来为您提供拖放面板。

首先检查该控件库是否具有移出可见窗口区域的内置功能。<​​/ strong>

我认为它有事件表明面板已移动。检查这个伪代码:

if (panel.Left < 0) { } // Outside left border
if (panel.Top < 0) { } // Outside top border
if ((panel.Left + panel.Width) > form.Width){ } // Outside right border
if ((panel.Top + panel.Height) > form.Height) { } // Outside bottom border

或者:

如果事件支持取消,请在上述任何一种情况发生时取消。否则你可以实现像这样的伪代码(实际WinForms维度需要一些不同的值)

// Outside left border
if (panel.Left < 0) { panel.Left = 0; }

// Outside top border
if (panel.Top < 0) { panel.Top = 0; } 

// Outside right border
if ((panel.Left + panel.Width) > form.Width)
{
    panel.Left = form.Width - panel.Width;
} 

// Outside bottom border
if ((panel.Top + panel.Height) > form.Height)
{
    panel.Top = (form.Height - panel.Height);
}