Problem with Scrolling in WinForm C# in Panel AutoScroll with Dynamic created buttons. here is a simple example?
//form Form1.cs //Created a Panel with Manual Designed Buttons and autoscrool= true. //You can click.down and scroll anywhere in panel1. it scrolls the way it //should. but if I create it Dynamic buttons(as coded) it does not work. I //click.down on buttons and i can not scroll????... I'm able to scroll if //clicked outside button... I need to click anywhere!!!! Please help
using System; using System.Drawing; using System.Windows.Forms;
namespace ScrollTouch { public partial class Form1 : Form { public Form1() { InitializeComponent(); new TouchScroll(panel1); }
private void Form1_Load(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { Button b = new Button(); b.Text = i.ToString(); b.Size = new Size(100, 90); b.Location = new Point(i*140, 0); panel1.Controls.Add(b); }
} } }
//form: TouchScroll.c (class) using System; using System.Drawing; using System.Windows.Forms;
namespace ScrollTouch { public class TouchScroll {
private Point mouseDownPoint; private Panel parentPanel;
public TouchScroll(Panel panel) { parentPanel = panel; AssignEvent(panel);
}
private void AssignEvent(Control control) { control.MouseDown += MouseDown; control.MouseMove += MouseMove; foreach (Control child in control.Controls) { AssignEvent(child); } }
private void MouseMove(object sender, MouseEventArgs e) {
if (e.Button != MouseButtons.Left) return;
Point pointDifference = new Point(Cursor.Position.X - mouseDownPoint.X, Cursor.Position.Y + mouseDownPoint.Y); if ((mouseDownPoint.X == Cursor.Position.X) && (mouseDownPoint.Y == Cursor.Position.Y)) return;
Point currAutos = parentPanel.AutoScrollPosition; parentPanel.AutoScrollPosition = new Point(Math.Abs(currAutos.X) + pointDifference.X, Math.Abs(currAutos.Y) + pointDifference.Y); mouseDownPoint = Cursor.Position; }
private void MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) this.mouseDownPoint = Cursor.Position; }
} }