2011-09-27 16 views
8

में किसी स्ट्रक्चर का संदर्भ कैसे बनाएं मेरे पास लाइनशैप नियंत्रण और कस्टम नियंत्रण (अनिवार्य रूप से लेबल वाला एक पिक्चरबॉक्स) है।मेरे आवेदन में सी #

कस्टम नियंत्रण के स्थान के अनुसार, मैं लाइनशिप को अपने बिंदु निर्देशांक में से एक को बदलना चाहता हूं।

मुझे कस्टम नियंत्रण के अंदर लाइनशिप बिंदु का संदर्भ सेट करने का विचार था और संदर्भ परिवर्तन ईवेंट हैंडलर जो संदर्भित बिंदु निर्देशांक को बदलता है।

हालांकि प्वाइंट में निर्मित एक संरचना है जो एक मान प्रकार है, इसलिए यह काम नहीं करेगा। क्या किसी के पास कोई विचार है, संरचना का संदर्भ कैसे देना है या शायद कोई मेरी समस्या के लिए कामकाज जानता है?

मैंने शून्य प्रकार के उपयोग के संबंध में समाधान की कोशिश की लेकिन यह अभी भी काम नहीं करता है।

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

आप जोड़ने 'रेफरी' द्वारा संदर्भ द्वारा मूल्य प्रकार पारित कर सकते हैं यहाँ जिस तरह से मैं अपने कस्टम नियंत्रण (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; 
    } 
} 

हालांकि, अगर यह कोड के लिए कारण LineShape नियंत्रण स्थानांतरित करने के लिए है, तो आप सीधे स्रोत के पास जाना चाहिए। नियंत्रण के गुणों को बदलने का सबसे अच्छा तरीका केवल नियंत्रण पर गुणों को बदलना है:

DeviceControl control = (DeviceControl)sender; 

    line1.StartPoint = [calculate point1 coordinates]; 
    line1.EndPoint = [calculate point2 coordinates]; 
संबंधित मुद्दे