c# - ¿Cómo hacer que el operador+funcione mientras se suman dos puntos?
.net winforms (2)
Leí la documentación de System.Drawing.Point
(vinculada en la respuesta de Cody Gray) y tiene un método de instancia Offset
. Ese método muta el Point
actual (¡los diseñadores eligieron hacer de Point
una estructura mutable!).
Así que aquí hay un ejemplo:
var p1 = new Point(10, 20);
var p2 = new Point(6, 7);
p1.Offset(p2); // will change p1 into the sum!
En el mismo documento, también veo una conversión explícita de Point
to Size
. Por lo tanto, intente esto:
var p1 = new Point(10, 20);
var p2 = new Point(6, 7);
Point pTotal = p1 + (Size)p2; // your solution?
¿Hay alguna manera de hacer que el operador +
trabaje para el objeto Point?
Tome, por ejemplo, este pequeño fragmento:
this.cm1.Show((MouseEventArgs)e.Location+this.i_rendered.Location);
Verán, trato de agregar dos puntos el uno al otro. Simplemente no funciona (lo que se esperaba). Me encantaría que esto funcionara.
¿Algunas ideas?
No va a suceder de la manera que esperas. La única sobrecarga que proporciona la estructura de Point
para el operador +
(adición) es aquella que traduce las coordenadas del Point
por un Size
.
No hay forma de agregar dos estructuras de Point
juntas, y ni siquiera estoy seguro de lo que eso significaría.
No pierda demasiado tiempo averiguándolo, ya sea porque no puede escribir métodos de extensión que sobrecarguen a los operadores .
Afortunadamente, en un lenguaje compilado, no hay ninguna penalización por dividir el código en varias líneas. Para que pueda volver a escribir su código de la siguiente manera:
Point newLocation = new Point(e.Location.X + this.i_rendered.Location.X,
e.Location.Y + this.i_rendered.Location.Y);
this.cm1.Show(newLocation);
Alternativamente, podría usar el método Offset
, pero no estoy convencido de que mejore la legibilidad.