2011-09-27 4 views
8

の構造体への参照を作成する方法私はLineShapeコントロールとカスタムコントロール(基本的にPictureBox with Label)を持っています。私のアプリケーションではC#

カスタムコントロールの位置に従って、LineShapeで点座標の1つを変更します。

私は、カスタムコントロール内にLineShapeポイントへの参照を設定し、参照ポイント座標を変更するロケーション変更イベントハンドラを追加することを考えました。

しかし、組み込みのPointは値型の構造体なので動作しません。誰もがアイデアを持っている、どのように構造への参照を作成するか、誰かが私の問題の回避策を知っていますか?

nullable型の使用に関する解決策を試しましたが、まだ動作しません。

private Point? mConnectionPoint; 

と場所変更イベントハンドラの実装:

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

答えて

7

あなたが「REF」を追加することにより、参照することによって値型を渡すことができますここに私は私のカスタムコントロール(DeviceControl)のフィールドを定義する方法ですメソッドの前にそれを渡します。このような

void method(ref MyStruct param) 
{ 
} 
0

あなたの方法が本当にmConnectionPointメンバーへの「参照のアクセスを必要としません。あなたは、クラスのメンバーとして、参照ポイントに直接位置の値を割り当てることができます。

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

をしかし、このコードの理由は、線形制御を移動する場合、その後、あなたがソースにまっすぐに行く必要があります。コントロールのプロパティを変更する最も良い方法は、コントロールのプロパティを変更することだけです。

DeviceControl control = (DeviceControl)sender; 

    line1.StartPoint = [calculate point1 coordinates]; 
    line1.EndPoint = [calculate point2 coordinates]; 
関連する問題