В цикле for задайте условие конечной точки вашего экрана, точно так же, как в графике, мы можем дать getmaxx () для автоматического определения координаты x максимальной длины вашего экрана, вот так вы можете добавить заголовочный файл
graphics.h ## заголовочный файл
А затем используйте getmaxx () для обнаружения x и затем getmaxy () для обнаружения y, который вы можете использовать, если он не работает, тогда прокомментируйте меня, я попробую его самостоятельно.
Отключение средств управления не поможет Вам, поскольку я нашел из своего приложения POS, что пользователи могут красться в другом щелчке приблизительно в 50 мс, особенно при использовании сенсорного экрана, который не калибруется.
Одна из проблем, которые это создает, при создании счета, у Вас не может быть дублирующегося щелчка, производят другой счет, просто потому что существует задержка на 50 мс прежде, чем очистить текущий счет.
В случаях как это я использую шаблон, подобный этому:
public static void ClearMouseClickQueue()
{
Message message;
while (PeekMessage(out message,IntPtr.Zero, (uint) MessageCodes.WM_MOUSEFIRST,(uint) MessageCodes.WM_MOUSELAST,1) != 0)
{
}
}
private object approvalLockObject = new object();
private void btnApproveTransaction_Click(object sender, EventArgs e)
{
ApproveTransactionAndLockForm();
}
private void ApproveTransactionAndLockForm()
{
lock (approvalLockObject)
{
if (ApprovalLockCount == 0)
{
ApprovalLockCount++;
ApproveTransaction();
}
else
{
CloseAndRetry();
}
}
}
private void ApproveTransaction()
{
ClearMouseClickQueue();
this.Enabled = false;
Logger.LogInfo("Before approve transaction");
MouseHelper.SetCursorToWaitCursor();
... validate invoice and print
}
В случае, если необходимо повторно включить экран, сделайте это:
this.Enabled = true;
ApprovalLockCount = 0;
DialogResult = DialogResult.None;
Я полагаю, что лучшее решение состоит в том, чтобы предотвратить события. Можно сделать это путем отключения всех средств управления и перевключения им, когда долгая операция заканчивается.