نقل Picturebox في لوحة
-
20-09-2019 - |
سؤال
لدي مشروع في C#، Windowsforms و Late A panel
الذي يحتوي على أ pictureBox
هذا أكبر بكثير من والديه.
انا ألتفت panel.AutoScroll
ل true
وما أريد فعله هو سحب هذا pictureBox
في panel
بدلا من اصطياد التمرير ونقله.
أي عندما أمسك صورة وأتحرك المؤشر إلى اليسار والأسفل ، أود الحصول على نفس السلوك الذي سأفعله به panel
مخطوطات.
كيف افعلها ؟
المحلول
حسنا فهمت. ؛-) إذا كان لدى أي شخص آخر نفس المشكلة ، فإليك الحل:
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 :)
protected Point clickPosition;
protected Point scrollPosition;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
this.clickPosition = e.Location;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.SuspendLayout();
this.scrollPosition += (Size)clickPosition - (Size)e.Location;
this.panel1.AutoScrollPosition = scrollPosition;
this.ResumeLayout(false);
}
}
حل محسّن من 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;
}
}
لا تنتمي إلى StackOverflow