पर फेंकता है मैं एक सार UserControl
, BaseControl
रखना चाहता हूं, जो एक इंटरफ़ेस IBaseControl
लागू करता है। हालांकि, सार टूटता VisualStudio डिजाइनर के लिए कक्षा की स्थापना (यह इस के आसपास काम करने के लिए दृश्य स्टूडियो (जैसे, अधिक जानकारी के लिए this StackOverflow posting देखें), और जहाँ तक मुझे पता है, वहाँ no change expected in the near futureविजुअलस्टूडियो 2010 डिज़ाइनर लागू वर्चुअल विधि
तो, के साथ एक ज्ञात मुद्दा है, । मैं BaseControl
सार नहीं है, और IBaseControl
तरीकों आभासी की इसके कार्यान्वयन हालांकि, बाद से इन तरीकों एक BaseControl
(जैसे, सभी घटकों को अभी तक जोड़ा गया है नहीं) के लिए कोई अर्थ नहीं है, मैं उन्हें फेंक कर:
public class BaseControl : UserControl, IBaseControl
{
/// <summary>
/// This IBaseControl method is not abstract because
/// that breaks the Designer
/// </summary>
public virtual void LoadSettings()
{
throw new NotImplementedException("Implement in derived class.");
}
private void BaseControl_Load(object sender, EventArgs e)
{
// intention: derived methods automagically load their settings
this.LoadSettings();
}
}
में व्युत्पन्न नियंत्रण, मेरे पास संबंधित ओवरराइड है:
public partial class DerivedControl : BaseControl
{
public override void LoadSettings()
{
// load settings
}
}
इसके बावजूद, जब मैं डिजाइनर में नियंत्रण खोलने का प्रयास करता हूं, तो मुझे एक त्रुटि मिलती है जो BaseControl.LoadSettings
ने अपवाद फेंक दिया है।
अब, LoadSettings
याद आधार वर्ग में कहा जाता है, इसलिए जब डिजाइनर लोड करता है DerivedControl
, यह बदले में BaseControl
, जो फेंकता के लिए लोड प्रणाली को बुलाती है।
क्या आपको ऐसी ही समस्या का सामना करना पड़ा है? आपने इससे कैसे निपटाया है? यदि संभव हो, तो मैं एक सुरुचिपूर्ण समाधान करना चाहता हूं।
कोई रेपो नहीं, मुझे उम्मीद नहीं थी। टूलबार पर आपके पास दो नियंत्रण हैं, गलत मत चुनें। लोड ईवेंट का उपयोग करने के बजाय आपको वास्तव में ऑनलोड को ओवरराइड करना चाहिए। –