2011-09-27 30 views
8

en mi aplicación tengo un control LineShape y un control personalizado (esencialmente un cuadro de imagen con etiqueta).Cómo hacer una referencia a una estructura en C#

Quiero que el LineShape para cambiar uno de sus puntos de coordenadas, según la ubicación del control personalizado.

que tuvo la idea de establecer una referencia a un punto LineShape dentro del control personalizado y añadir controlador de eventos de cambio de ubicación que cambia coordenadas del punto de referencia.

Sin embargo construida en Point es una estructura que es un tipo de valor, por lo que no va a funcionar. ¿Alguien tiene idea, cómo hacer una referencia a una estructura o tal vez alguien sabe una solución para mi problema?

Probé la solución con respecto al uso del tipo anulable pero todavía no funciona. Aquí está la forma en que definen el campo de mi control personalizado (DeviceControl):

private Point? mConnectionPoint; 

y la aplicación de la ubicación manejador de eventos de cambio:

private void DeviceControl_LocationChanged(object sender, EventArgs e) 
{ 
    if (mConnectionPoint != null) 
    { 
     DeviceControl control = (DeviceControl)sender; 

     Point centerPoint= new Point(); 
     centerPoint.X = control.Location.X + control.Width/2; 
     centerPoint.Y = control.Location.Y + control.Height/2; 

     mConnectionPoint = centerPoint; 
    } 
} 

Respuesta

7

Puede pasar los tipos de valor por referencia 'ref' añadiendo antes cuando pasa en un método.

así:

void method(ref MyStruct param) 
{ 
} 
0

Su método en realidad no se requiere el acceso de 'referencia' al miembro mConnectionPoint; Puede asignar los valores de ubicación directamente al punto de referencia, como un miembro de su clase:

private void DeviceControl_LocationChanged(object sender, EventArgs e) 
{ 
    if (mConnectionPoint != null) 
    { 
     DeviceControl control = (DeviceControl)sender; 

     mConnectionPoint.X = control.Location.X + control.Width/2; 
     mConnectionPoint.Y = control.Location.Y + control.Height/2; 
    } 
} 

Sin embargo, si la razón de este código es mover el control LineShape, entonces usted debe ir directamente a la fuente. La mejor manera de cambiar las propiedades de un control es simplemente cambiar las propiedades en el control:

DeviceControl control = (DeviceControl)sender; 

    line1.StartPoint = [calculate point1 coordinates]; 
    line1.EndPoint = [calculate point2 coordinates]; 
Cuestiones relacionadas