.net 逐点转换^
我正在尝试使用鼠标左键移动我的表单。我有这个:.net 逐点转换^,.net,winforms,c++-cli,system.drawing,.net,Winforms,C++ Cli,System.drawing,我正在尝试使用鼠标左键移动我的表单。我有这个: if(e->Button == Windows::Forms::MouseButtons::Left) { Point^ mousePos = gcnew Point(); mousePos = Control::MousePosition; mousePos->Offset(mouse_offset->X,mouse_offset->Y); Location = mousePos;
if(e->Button == Windows::Forms::MouseButtons::Left)
{
Point^ mousePos = gcnew Point();
mousePos = Control::MousePosition;
mousePos->Offset(mouse_offset->X,mouse_offset->Y);
Location = mousePos;
}
代码似乎正常,但视觉返回错误:
错误C2664:“无效”
系统::Windows::窗体::控件::位置::集(系统::绘图::点)'
:无法将参数1从“System::Drawing::Point^”转换为
'系统::绘图::点'
我不明白-我创建了可变鼠标点作为点^。你知道怎么回事吗?问题是该方法需要一个
点
,而你要给它传递一个点^
(指向点的托管指针
-weeee,这里有太多的“点”…。点是一个值类(虽然不是一个不变的)。为什么要在(托管)堆上分配一个?在这个函数中,我看不出有任何理由这样做。“我创建了可变鼠标点作为点^”-这就是问题所在。该方法需要一个点,但您给它一个指向点的指针。@H2CO3:您是对的,谢谢您的帮助:)当您编写这样的代码时,有一个更大的问题,您不理解引用类型(您使用帽子的类型)和值类型(如点)之间的区别。这非常重要,创建这样一个点会创建一个装箱值类型。它不是指向点的指针,而是对象引用。效率很低,在很多情况下编译器都会毫无怨言地接受。幸运的是,您在这里遇到了一个编译错误。任何关于C++/CLI的像样的书都会帮助您理解其中的区别。