2011-09-27 21 views
8

nella mia applicazione, ho un controllo LineShape e un controllo personalizzato (essenzialmente un PictureBox con etichetta).Come creare un riferimento a una struttura in C#

Desidero che LineShape modifichi una delle sue coordinate punti, in base alla posizione del controllo personalizzato.

Mi è venuta l'idea di impostare un riferimento a un punto LineShape all'interno del controllo personalizzato e aggiungere il gestore eventi di modifica posizione che modifica le coordinate punto di riferimento.

Tuttavia, in Point è una struttura che è un tipo di valore, quindi non funzionerà. Qualcuno ha idea, come fare riferimento a una struttura o forse qualcuno conosce una soluzione alternativa per il mio problema?

Ho provato la soluzione relativa all'utilizzo del tipo nullable ma ancora non funziona. Ecco il mio modo di definire il campo nel mio controllo personalizzato (DeviceControl):

private Point? mConnectionPoint; 

e l'attuazione della posizione gestore evento change:

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; 
    } 
} 

risposta

7

È possibile passare i tipi di valore con riferimento con l'aggiunta di 'ref' prima di passare a un metodo.

come questo:

void method(ref MyStruct param) 
{ 
} 
0

Il tuo metodo in realtà non richiede l'accesso 'riferimento' al membro mConnectionPoint; È possibile assegnare i valori di posizione direttamente al punto di riferimento, come un membro della vostra classe:

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; 
    } 
} 

Tuttavia, se la ragione di questo codice è quello di spostare il controllo LineShape, allora si dovrebbe andare direttamente alla fonte. Il modo migliore per modificare le proprietà di un controllo consiste nel modificare le proprietà sul controllo:

DeviceControl control = (DeviceControl)sender; 

    line1.StartPoint = [calculate point1 coordinates]; 
    line1.EndPoint = [calculate point2 coordinates]; 
Problemi correlati