Hallo Experten,
auf einem Panel werden verschiedene Objekte gezeichnet. Das Panel ist scrollbar. Ich möchte eines der Objekte mit der Maus verschieben.
Ist das Panel nicht ganz nach oben links gescrollt, wird die Position nicht korrekt berechnet. Schrittweises Debuggen zeigte, dass die Methode Offset() in diesem Codeschnipsel nichts tut.:[highlight=c#]class DragItem
{
private Point m_ptGrip = Point.Empty;
public Point Grip
{
get { return (m_ptGrip); }
set { m_ptGrip = value; }
}
}
class MyPanel:System.Windows.Forms.Panel
{
private DragItem m_ItemDragging = new DragItem();
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (m_ItemDragging != null)
{
m_ItemDragging.Grip = new Point(e.Location.X, e.Location.Y);
m_ItemDragging.Grip.Offset(-this.AutoScrollPosition.X, -this.AutoScrollPosition.Y);
//m_ItemDragging.Grip = new Point(m_ItemDragging.Grip.X - this.AutoScrollPosition.X, m_ItemDragging.Grip.Y - this.AutoScrollPosition.Y);
}
}
}[/highlight]Grip ändert seinen Wert auch dann nicht, wenn die AutoscrollPosition von (0,0) abweicht.
Die auskommentierte Zeile funktioniert tadellos und sollte das Selbe bedeuten wie die gezeigte Verwendung von Offset(). Mein Problem hierbei ist, dass ich mich darauf verlasse, dass eine Property geschrieben wird. Ich erhalte keine Fehlermeldung, etwa dass die Property schreibgeschützt wäre. Dennoch verhält sie sich anders als erwartet.
Woran liegt es, dass Grip durch Offset() nicht verändert wird?
Mit freundlichem Gruß
luker
auf einem Panel werden verschiedene Objekte gezeichnet. Das Panel ist scrollbar. Ich möchte eines der Objekte mit der Maus verschieben.
Ist das Panel nicht ganz nach oben links gescrollt, wird die Position nicht korrekt berechnet. Schrittweises Debuggen zeigte, dass die Methode Offset() in diesem Codeschnipsel nichts tut.:[highlight=c#]class DragItem
{
private Point m_ptGrip = Point.Empty;
public Point Grip
{
get { return (m_ptGrip); }
set { m_ptGrip = value; }
}
}
class MyPanel:System.Windows.Forms.Panel
{
private DragItem m_ItemDragging = new DragItem();
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (m_ItemDragging != null)
{
m_ItemDragging.Grip = new Point(e.Location.X, e.Location.Y);
m_ItemDragging.Grip.Offset(-this.AutoScrollPosition.X, -this.AutoScrollPosition.Y);
//m_ItemDragging.Grip = new Point(m_ItemDragging.Grip.X - this.AutoScrollPosition.X, m_ItemDragging.Grip.Y - this.AutoScrollPosition.Y);
}
}
}[/highlight]Grip ändert seinen Wert auch dann nicht, wenn die AutoscrollPosition von (0,0) abweicht.
Die auskommentierte Zeile funktioniert tadellos und sollte das Selbe bedeuten wie die gezeigte Verwendung von Offset(). Mein Problem hierbei ist, dass ich mich darauf verlasse, dass eine Property geschrieben wird. Ich erhalte keine Fehlermeldung, etwa dass die Property schreibgeschützt wäre. Dennoch verhält sie sich anders als erwartet.
Woran liegt es, dass Grip durch Offset() nicht verändert wird?
Mit freundlichem Gruß
luker
Comment