Страницы

Поиск по вопросам

суббота, 20 апреля 2019 г.

Как правильно определить правую границу формы?

Требуется перемещать элемент управления так, чтобы он не выходил за границы формы. С левой границей отследить достижение границы оказалось легко:
if (PointToClient(p).X >= 0){/*код*/ }
Но когда я пытаюсь сделать так:
int w = ActiveForm.Size.Width; if (PointToClient(p).X <= w){/*код*/ }
элемент всё равно уходит за правую границу. Т. е. Size.Width - это не правая граница формы.
В связи с этим вопрос: как определить правую границу?


Ответ

В качестве ответа могу предложить простое, «в лоб», но всё же решение в виде SLN
Там просто на форме бегает панелька, отталкиваясь от краев формы и верхней панели и проверяя, не выходят ли координаты контрола (панели) за установленные границы.

Сам код:
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Threading;
namespace RightMargin { ///

/// Description of MainForm. /// public partial class MainForm : Form { public bool MoveActive { get; set; } public int deltaX { get; set; } public int deltaY { get; set; }
public MainForm() { InitializeComponent(); MoveActive = false; deltaX = 1; deltaY = 1; }
void buttonCloseClick(object sender, EventArgs e) { MoveActive = false; Close(); }
void ButtonStartClick(object sender, EventArgs e) { MoveActive = true; while (MoveActive) { int newX = boxPanel.Left + deltaX; int newY = boxPanel.Top + deltaY;
int maxX = ActiveForm.ClientSize.Width - boxPanel.Size.Width - 1; int maxY = ActiveForm.ClientSize.Height - boxPanel.Size.Height - 1;
//Проверка координат if (newX < 0) { newX = 0; deltaX = -deltaX; } if (newY < panelMenu.Size.Height) { newY = panelMenu.Size.Height; deltaY = -deltaY; } if (newX > maxX) { newX = maxX; deltaX = -deltaX; } if (newY > maxY) { newY = maxY; deltaY = -deltaY; }
boxPanel.Left = newX; boxPanel.Top = newY; //Thread.Sleep(2); Application.DoEvents(); } }
void ButtonStopClick(object sender, EventArgs e) { MoveActive = false; } } }

Комментариев нет:

Отправить комментарий