0

我想用 C++ 编写一个应用程序,当用户按住并移动鼠标时可以平移图像。我使用了一个面板并在上面放了一个图片框。Panel 的属性 AutoScroll 设置为 true。现在我试图在鼠标移动时改变滚动条的位置。我尝试了几种方法,但它不起作用。

为简单起见,我在这里使用 +/-100、+/-100 作为代码。我试过

Point p = new Point(100, 100);
panel1->AutoScrollPosition = p;

它给了我以下错误:

无法从 'System::Drawing::Point *' 转换为 'System::Drawing::Point'"

我还尝试了以下方法。

panel1->AutoScrollPosition.X = 100;
panel1->AutoScrollPosition.Y = 100;

但是,滚动条不会移动并始终返回 0,0。我曾尝试同时使用 -ve 和 +ve 值,但它不起作用。

我怎么解决这个问题?

4

1 回答 1

2

System::Drawing::Point是一个结构,而不是一个类。结构是值类型,不需要 new 运算符。我不是在编译器,但我相信这是你想要的语法:

Point p(100, 100);
panel1->AutoScrollPosition = p;

(此外,Point 作为托管类型gcnew会更合适。new有效,但非常不标准,没有 API 会接受该类型的参数。)

您尝试的另一件事:

panel1->AutoScrollPosition.X = 100;
panel1->AutoScrollPosition.Y = 100;

这不起作用,因为 Point 是一个结构。AutoScrollPosition返回结构的副本,这就是您修改的内容。当您尝试此操作时,C# 将给出编译器警告。如果您确实需要修改 Point 的一个组件,请执行以下操作(这适用于 C++/CLI 和 C#):

Point p = panel1->AutoScrollPosition;
p.X = 100;
panel1->AutoScrollPosition = p;
于 2013-03-16T12:35:14.147 回答