C# 移动面板中的图片框
我在C#、WindowsForms中有一个项目,我创建了一个C# 移动面板中的图片框,c#,winforms,panel,picturebox,C#,Winforms,Panel,Picturebox,我在C#、WindowsForms中有一个项目,我创建了一个面板,其中包含一个图片盒,比他的父母大得多 我将panel.AutoScroll转到true,我想做的是在panel中拖动这个pictureBox,而不是捕捉一个滚动并移动它 也就是说,当我抓取一幅图像并将光标向左和向下移动时,我希望得到与使用面板的卷轴时相同的行为 怎么做?好的,我知道了如果其他人也有同样的问题,以下是解决方案: protected Point clickPosition; protected Poin
面板
,其中包含一个图片盒
,比他的父母大得多
我将panel.AutoScroll
转到true
,我想做的是在panel
中拖动这个pictureBox
,而不是捕捉一个滚动并移动它
也就是说,当我抓取一幅图像并将光标向左和向下移动时,我希望得到与使用面板
的卷轴时相同的行为
怎么做?好的,我知道了如果其他人也有同样的问题,以下是解决方案:
protected Point clickPosition;
protected Point scrollPosition;
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
this.clickPosition.X = e.X;
this.clickPosition.Y = e.Y;
}
private void pictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
scrollPosition.X = scrollPosition.X + clickPosition.X - e.X;
scrollPosition.Y = scrollPosition.Y + clickPosition.Y - e.Y;
this.panel.AutoScrollPosition = scrollPosition;
}
}
hsz解决方案的较小变体:)
一个改进的解决方案,从hsz',限制滚动,但我只允许垂直滚动
protected Point clickPosition;
protected Point scrollPosition;
private void picBoxScan_MouseDown(object sender, MouseEventArgs e)
{
this.clickPosition.X = e.X;
this.clickPosition.Y = e.Y;
}
private void picBoxScan_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
scrollPosition.X = panelViewFile.AutoScrollPosition.X;
scrollPosition.Y = scrollPosition.Y + (clickPosition.Y - e.Y);
scrollPosition.Y = Math.Min(scrollPosition.Y,panelViewFile.VerticalScroll.Maximum);
scrollPosition.Y = Math.Max(scrollPosition.Y,panelViewFile.VerticalScroll.Minimum);
panelViewFile.AutoScrollPosition = scrollPosition;
}
}
protected Point clickPosition;
protected Point scrollPosition;
private void picBoxScan_MouseDown(object sender, MouseEventArgs e)
{
this.clickPosition.X = e.X;
this.clickPosition.Y = e.Y;
}
private void picBoxScan_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
scrollPosition.X = panelViewFile.AutoScrollPosition.X;
scrollPosition.Y = scrollPosition.Y + (clickPosition.Y - e.Y);
scrollPosition.Y = Math.Min(scrollPosition.Y,panelViewFile.VerticalScroll.Maximum);
scrollPosition.Y = Math.Max(scrollPosition.Y,panelViewFile.VerticalScroll.Minimum);
panelViewFile.AutoScrollPosition = scrollPosition;
}
}