2013-05-30 4 views
0

Я пытаюсь переместить мою форму с помощью левой кнопки мыши. У меня есть это:Convert Point to Point^

if(e->Button == Windows::Forms::MouseButtons::Left) 
{ 
    Point^ mousePos = gcnew Point(); 
    mousePos = Control::MousePosition; 
     mousePos->Offset(mouse_offset->X,mouse_offset->Y); 
    Location = mousePos; 
} 

код кажется нормально, но ошибка Визуальная возвращения:

error C2664: 'void System::Windows::Forms::Control::Location::set(System::Drawing::Point)' : cannot convert parameter 1 from 'System::Drawing::Point ^' to 'System::Drawing::Point'

Я не понимаю - я создал переменную mousePos как точка ^. Вы не знаете, что случилось?

+2

«Я создал переменную mousePos как точку ^» - вот в чем проблема. Метод ожидает Point, но вы даете ему указатель на Point. –

+0

@ H2CO3: вы были правы, спасибо за помощь :) –

+1

У вас большая проблема, когда вы пишете такой код, вы не понимаете разницу между ссылочными типами (теми, с которыми вы используете шляпу), и типами значений, такими как Point. Это очень важно, создавая точку ^, которая создает тип значения * boxed *. Это не указатель на точку, это ссылка на объект. Очень неэффективен и принят компилятором без жалобы в слишком многих случаях. Вам повезло, отключив ошибку компиляции. Любая достойная книга о C++/CLI поможет вам понять разницу. –

ответ

1

Проблема заключается в том, что метод ожидает Point тогда вы передаете ему (управляемый указатель Point - weeee, слишком много «точек» ы здесь ...).

1

Точка - это класс значений (хотя и не непреложный). Почему вы назначаете один из (управляемой) кучи? Я ничего не вижу в этой функции, которая оправдывает это.