2014-09-21 1 views
1

У меня проблема с перемещением метки на панели. Когда я перемещаю эту метку, достигая верхней и левой (0.0), метка соответствует верхнему и левому. Чтобы провести половину экрана, ярлык превышает панель, как показано на рисунке.Управление перемещением во время выполнения

enter image description here

Мои коды:

public partial class frmStandard : Form 
{ 
    Point startposition;  
} 

public void MouseDown(object sender, MouseEventArgs e) 
{ 
    startposition = e.Location; 
} 

public void MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     ((Label)sender).Left = Math.Max(0, e.X + ((Label)sender).Left - startposition.X); 
     ((Label)sender).Top = Math.Max(0, e.Y + ((Label)sender).Top - startposition.Y); 
    } 
} 

мне нужна метка не превышает панель size.What должны быть добавлены в кодах?

+0

Возможно, это проблема Z-порядка, этикетка исчезает под этой панелью инструментов. Простым обходным решением является * не * установка панели инструментов на панели. Код MouseMove также должен работать, как только Max() выполнит свою работу, тогда положение мыши не синхронизируется с положением метки. Избегайте проблем с PointToScreen. Пример кода [находится здесь] (http://stackoverflow.com/a/25591801/17034). –

ответ

4

Вам необходимо проверить другие границы.

Для этого вам нужно будет использовать данные измерения содержащего Panel.

В духе сохранения вещей динамической, так как ваш код уже есть, я использую его Label «s Parent вместо ссылки только один Panel:

private void MouseMove(object sender, MouseEventArgs e) 
{ 
    Label L = (Label)sender; 
    Rectangle PR = L.Parent.ClientRectangle; 

    if (e.Button == MouseButtons.Left) 
    { 
    L.Left = Math.Min(Math.Max(0, e.X + L.Left - startposition.X), PR.Right - L.Width); 
    L.Top = Math.Min(Math.Max(0, e.Y + L.Top - startposition.Y), PR.Bottom - L.Height); 
    } 
} 

Чтобы сохранить его еще более общем, можно было бы замените Label на Control и позвольте пользователю переместить другие Controls вокруг этих же фрагментов кода.