Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перерисовка контрола 
V
    Опции темы
senalex
Дата 23.7.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 6.5.2008

Репутация: 1
Всего: 1



Всем привет,
возникла ситуация перемещения контрола по форме пользователем, реализовал это через события: mousedown, mousemove, mouseup. Контрол который я перемещая стандартная панель и кнопки. Теперь когда перетаскиваешь контрол за ним остается шлейф, как можно это исправить?
PM MAIL   Вверх
diadiavova
Дата 23.7.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Я думаю тут причина в реализации. Обычно для того, чтобы пользователь мог двигать контрол достаточно события MouseMove, при этом никакого шлейфа не остаётся. В обработчике просто надо проверять нажата ли кнопка мыши, если нет - фиксировать положение мыши в переменной, объявленной на уровне класса, а если да - перемещать контрол с учётом последнего зафиксированного положения мыши.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
senalex
Дата 23.7.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 6.5.2008

Репутация: 1
Всего: 1



Сделал так:

Код

bool captMoved = false; //Перемещался ли контрол
int captX=0; // Значение контрола по Х до перемещения
int captY=0; // Значение контрола по Y до перемещения
void capt_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button==MouseButtons.Left)
{
(sender as Panel).Parent.Dock = DockStyle.None;
(sender as Panel).Parent.Left = Cursor.Position.X-captX;
(sender as Panel).Parent.Top = Cursor.Position.Y-captY;
captMoved = true;
}
}
void capt_MouseDown(object sender, MouseEventArgs e)
{
captX = Cursor.Position.X - (sender as Panel).Parent.Left;
captY = Cursor.Position.Y - (sender as Panel).Parent.Top;
}
void capt_MouseUp(object sender, MouseEventArgs e)
{
if (captMoved)
{
captMoved = false;
panel_DoubleClick(sender, new EventArgs());
}
}



Все нормально работает.
Но если вместо Cursor.Position подставить e.Location, то контрол не успевает перерисовываться и виден "шлейф".
PM MAIL   Вверх
diadiavova
Дата 23.7.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Посмотри пример

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  ControlMove.rar 33,12 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.