Координаты на форме
От: Milamber  
Дата: 07.03.07 14:03
Оценка:
Кликаю на Panel, который находится на форме. Через аргумент e
private void Panel_MouseDown(object sender, MouseEventArgs e)

можно получить координаты мыши на плоскости Panel. а как отсюда получить координаты на форме?
функция
private void Diagr_MouseDown(object sender, MouseEventArgs e)

клика по форме не срабатывает по клику на Panel'e

спасибо
Re: Координаты на форме
От: Asker_ Россия  
Дата: 07.03.07 14:20
Оценка: +1
Здравствуйте, Milamber, Вы писали:

M>можно получить координаты мыши на плоскости Panel. а как отсюда получить координаты на форме?


Думаю надо сначала получить экранные координаты клика, а потом пересчитать их в относительные используя экранные координаты формы
Re: Координаты на форме
От: Victor_avi  
Дата: 07.03.07 14:27
Оценка:
private void panel1_MouseClick(object sender, MouseEventArgs e)
        {
            int fx = e.X+this.Left;
            int fy = e.Y+this.Top;
            MessageBox.Show("X: "+fx.ToString()+" "+"Y: "+fy.ToString());
        }
Re[2]: Координаты на форме
От: Victor_avi  
Дата: 07.03.07 14:30
Оценка:
Здравствуйте, Victor_avi, Вы писали:


V_>
V_>private void panel1_MouseClick(object sender, MouseEventArgs e)
V_>        {
V_>            int fx = e.X+this.Left;
V_>            int fy = e.Y+this.Top;
V_>            MessageBox.Show("X: "+fx.ToString()+" "+"Y: "+fy.ToString());
V_>        }
V_>


херню написал.

так:
private void panel1_MouseClick(object sender, MouseEventArgs e)
       {
           int fx = e.X+panel1.Left;
           int fy = e.Y+panel1.Top;
          MessageBox.Show("X: "+fx.ToString()+" "+"Y: "+fy.ToString());
       }
Re[3]: Координаты на форме
От: Asker_ Россия  
Дата: 07.03.07 14:33
Оценка:
Здравствуйте, Victor_avi, Вы писали:

А если панель встроена в другую панель, и ещё куда... Нужно то координаты формы.
Re[3]: Координаты на форме
От: Igor Trofimov  
Дата: 07.03.07 18:28
Оценка:
V_>херню написал.
V_>так:

Так тоже не лучше

Правильно — см. методы Control.PointToScreen и Control.PointToClient
Re[3]: Координаты на форме
От: Milamber  
Дата: 07.03.07 18:47
Оценка:
Здравствуйте, Victor_avi, Вы писали:

V_>так:

V_>
V_>private void panel1_MouseClick(object sender, MouseEventArgs e)
V_>       {
V_>           int fx = e.X+panel1.Left;
V_>           int fy = e.Y+panel1.Top;
V_>          MessageBox.Show("X: "+fx.ToString()+" "+"Y: "+fy.ToString());
V_>       }
V_>

спасибо
Re[4]: Координаты на форме
От: Milamber  
Дата: 07.03.07 19:28
Оценка:
наверняка ктото уже чтото подобное делал.
по нажатию кнопки мыши на панели мы фиксируем начало движения.
дальше при движении мышки мы изменяем координаты панели.
при отжатии кнопки мышки снимаем флаг передвижения.

проблема в том, что при резком (относительно. просто не плавном) передвижении мышки при нажатой кнопке панель теряет фокус мышки и соответственно не может дальше перемещаться. т.е. мышка двигается, а панель стоит на старом месте.

private void Panel_MouseMove(object sender, MouseEventArgs e)
{
    if (md == 1)
    {
        if (((e.X + f2.Left) > f2.Location.X) && ((e.X + f2.Left) < f2.Location.X + f2.Size.Width) && ((e.Y + f2.Top) > f2.Location.Y) && ((e.Y + f2.Top) < f2.Location.Y + f2.Size.Height))
        {
            f2.Location = new Point(f2.Location.X + e.X - x, f2.Location.Y + e.Y - y);
        }
    }
}

private void Panel_MouseDown(object sender, MouseEventArgs e)
{
    md = 1;
    x = e.X;
    y = e.Y;
}

private void Panel_MouseUp(object sender, MouseEventArgs e)
{
    md = 0;
}

пытался действия в Panel_MouseMove поместить в Paint формы. вообще ничего не происходит.
возможно я перемудрил с действиями в Panel_MouseMove
Re[5]: Координаты на форме
От: Milamber  
Дата: 09.03.07 11:41
Оценка:
неужели никто таким не занимался?
Re[5]: Координаты на форме
От: Igor Trofimov  
Дата: 12.03.07 07:07
Оценка:
M>проблема в том, что при резком (относительно. просто не плавном) передвижении мышки при нажатой кнопке панель теряет фокус мышки и соответственно не может дальше перемещаться. т.е. мышка двигается, а панель стоит на старом месте.

см. Control.Capture
Re[5]: Координаты на форме
От: Аноним  
Дата: 12.03.07 14:03
Оценка:
Здравствуйте, Milamber, Вы писали:

M>наверняка ктото уже чтото подобное делал.

M>по нажатию кнопки мыши на панели мы фиксируем начало движения.
M>дальше при движении мышки мы изменяем координаты панели.
M>при отжатии кнопки мышки снимаем флаг передвижения.

M>проблема в том, что при резком (относительно. просто не плавном) передвижении мышки при нажатой кнопке панель теряет фокус мышки и соответственно не может дальше перемещаться. т.е. мышка двигается, а панель стоит на старом месте.


M>
M>private void Panel_MouseMove(object sender, MouseEventArgs e)
M>{
M>    if (md == 1)
M>    {
M>        if (((e.X + f2.Left) > f2.Location.X) && ((e.X + f2.Left) < f2.Location.X + f2.Size.Width) && ((e.Y + f2.Top) > f2.Location.Y) && ((e.Y + f2.Top) < f2.Location.Y + f2.Size.Height))
M>        {
M>            f2.Location = new Point(f2.Location.X + e.X - x, f2.Location.Y + e.Y - y);
M>        }
M>    }
M>}

M>private void Panel_MouseDown(object sender, MouseEventArgs e)
M>{
M>    md = 1;
M>    x = e.X;
M>    y = e.Y;
M>}

M>private void Panel_MouseUp(object sender, MouseEventArgs e)
M>{
M>    md = 0;
M>}
M>

M>пытался действия в Panel_MouseMove поместить в Paint формы. вообще ничего не происходит.
M>возможно я перемудрил с действиями в Panel_MouseMove

Не совсем из твоего метода MouseMove понял что ты хочешь сделать. Но я очень много писал всяких интерактивных компонент, на которых нужно было что-то перетаскивать при помощи мыши (в основном всякие нарисованные при помощи GDI+ элементы). Общий подход всегда такой: запоминаем координату, где щелкнули (я обычно называю prevPoint), затем в MouseMove смещаем что нужно на разницу текущего положения — того положения, которое запомнили. А после этого обновляем prevPoint на текущее значение. Сделай так и будет тебе счастье .
Re[6]: Координаты на форме
От: Milamber  
Дата: 13.03.07 16:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Общий подход всегда такой: запоминаем координату, где щелкнули (я обычно называю prevPoint), затем в MouseMove смещаем что нужно на разницу текущего положения — того положения, которое запомнили. А после этого обновляем prevPoint на текущее значение. Сделай так и будет тебе счастье .


такая система у меня и реализована. запоминаем при нажатии кнопки координаты. и при движении изменяем на разницу между текущими и прошлыми. при следующем нажатии будут браться новые координаты. если менять прошлые сразу после изменения при движении мышки, то бред получается.

Здравствуйте, Igor Trofimov, Вы писали:

M>>проблема в том, что при резком (относительно. просто не плавном) передвижении мышки при нажатой кнопке панель теряет фокус мышки и соответственно не может дальше перемещаться. т.е. мышка двигается, а панель стоит на старом месте.


iT>см. Control.Capture


вырезание области?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.