2011-09-27 6 views
8

bir yapıda başvuru yapmak için bir LineShape denetimi ve özel bir denetim (esas olarak Etiketli bir PictureBox) var.Uygulamamda C#

Özel denetimin konumuna göre, LineShape'un nokta koordinatlarından birini değiştirmesini istiyorum.

Özel denetimin içindeki bir LineShape noktasına bir başvuru ayarlamak ve başvurulan nokta koordinatlarını değiştiren konum değişikliği olay işleyicisini eklemek için bir fikrim vardı.

Ancak, yerleşik olarak, bir değer türü olan bir yapıdır, bu nedenle çalışmaz. Kimsenin bir fikri var mı, bir yapıya nasıl referans yapılacağı ya da belki birileri benim sorunum için bir çözüm bulabilir mi?

NULL türünün kullanımıyla ilgili çözümü denedim, ancak hala çalışmıyor.

private Point? mConnectionPoint; 

Ve konum değişikliği olay işleyicisi uygulanması:

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

cevap

7
ekleyerek 'ref' tarafından referans olarak değer türlerini geçebilir

İşte benim özel denetim (DeviceControl) 'de alanı tanımlamak yolu bir yöntemden geçerken önce. Böyle

:

void method(ref MyStruct param) 
{ 
} 
0

gerçekten mConnectionPoint üyesine 'referans' erişim gerektirmez Yöntemin; Eğer sınıfın bir üyesi olarak, başvurulan Noktasına doğrudan konum değer atayabilirsiniz: Bu kodun nedeni olarak doğrusal kontrolü taşımak için ise

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

Ancak, o zaman doğrudan kaynağına gitmek gerekir. Bir denetimin özelliklerini değiştirmenin en iyi yolu, yalnızca denetimdeki özellikleri değiştirmektir:

DeviceControl control = (DeviceControl)sender; 

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