2014-07-18 8 views
8

में मौजूद है, मैं विंडोज़ फॉर्म टेम्पलेट के आधार पर एक विंडोज ऐप विकसित कर रहा हूं। मैं .NET 3.5 संस्करण का उपयोग कर रहा हूँ। इस ऐप में, लक्ष्य यह है कि विभिन्न रूपों की सभी दृश्य सेटिंग्स को App.Config फ़ाइल (पृष्ठभूमि रंग, विभिन्न बटन आदि का पृष्ठभूमि रंग ...) से प्रबंधित किया जा सकता है।त्रुटि: सेवा सिस्टम। Windows.Forms.Design.IEventHandlerService पहले से ही सेवा कंटेनर

तो बुनियादी तौर पर, मैं एक "FormBase" वर्ग, मेरे सभी रूपों के वारिस जिनमें से है, और इस वर्ग के इस तरह कोड शामिल हैं:

public class FormBase : Form 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     BackColor = Color.FromName(ConfigurationManager.AppSettings["backColor"]); 

     foreach (var item in this.Controls) 
     { 
      if (item is Button) 
      { 
       ((Button)item).BackColor = Color.FromName(ConfigurationManager.AppSettings["buttonBackground"]); 
       ((Button)item).ForeColor = Color.FromName(ConfigurationManager.AppSettings["buttonText"]); 
      } 
      if (item is ...) 
      { 
       //some other code 
      } 
     } 
    } 
} 

और फिर मैं जो की तरह कोड होता है मेरी app.config फ़ाइल है :

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="buttonText" value="White"/> 
    <add key="buttonBackground" value="Red"/> 
    <add key="backColor" value="White"/> 
    <add key="textColor" value="Red"/> 
    </appSettings> 
</configuration> 

और अब, मेरे सभी रूपों की घोषणा में मैं रेखा है

public partial class Form1 : FormBase 

मेरी समस्या यह है कि, जब मैं ऐप चलाता हूं तो यह ठीक चलता है, और यह काम करता है, ऐप में विभिन्न रंग। कॉनफिग फाइलें मेरे रूपों पर प्रदर्शित रंग हैं। लेकिन जब मैं सिर्फ एप्लिकेशन चलने के बिना दृश्य स्टूडियो में डिजाइनर को देखो, डिजाइनर किस रूप में की तरह दिखाई देगा प्रदर्शित नहीं कर सकता और मैं निम्न त्रुटि

सेवा System.Windows.Forms.Design मिलता है। IEventHandlerService सेवा कंटेनर में पहले से मौजूद है। पैरामीटर नाम: सेवा प्रकार

और मुझे नहीं पता कि इसे कैसे हल किया जाए। यह एक बड़ी समस्या नहीं है क्योंकि ऐप ठीक से चलता है, लेकिन यह मुझे परेशान करता है और मैं जानना चाहता हूं कि क्या हो रहा है

उत्तर

6

मैं बस इस समस्या में खुद भाग गया। किसी अन्य वेबपेज के मुताबिक, इस त्रुटि को विजुअल स्टूडियो को बंद करके और अपने ओबीजे फ़ोल्डर को हटाकर तय किया जा सकता है, और उसके बाद दृश्य स्टूडियो को फिर से खोलना और एक परियोजना पुन: निर्माण करना।

यहां वह पृष्ठ है जिसे मैंने इसे पढ़ा है। http://www.csharp411.com/ieventhandlerservice-already-exists-in-the-service-container/

उन्होंने बिन फ़ोल्डर को भी हटाने के लिए कहा लेकिन मुझे पता चला कि मुझे ऐसा करने की ज़रूरत नहीं है। उम्मीद है कि यह मदद करता है!

+0

मैंने कोशिश की लेकिन यह काम नहीं करता है। मैंने विजुअल स्टूडियो, हटाए गए फ़ोल्डरों को बंद कर दिया, फिर से खोल दिया और पुनः संकलित किया गया। मैंने पूरी तरह से समाधान को साफ करने की भी कोशिश की। कुछ करने को नहीं है। –

+0

मेरे लिए भी काम किया। मुझे केवल 'obj' फ़ोल्डर को हटाना पड़ा था, न कि' bin' फ़ोल्डर – BigHeadCreations

0

मैं अभी भी इस समस्या में भाग गया। मैंने उपरोक्त समाधान की कोशिश की, और यह मेरे लिए काम नहीं किया। संरचना मेरे पास है इस: सार्वजनिक Form1: फार्म सार्वजनिक Form2: Form1 सार्वजनिक Form3: Form2

मैं पुनर्निर्माण और obj/bin फ़ोल्डरों को हटाने की कोशिश की लेकिन दूर जाना इस त्रुटि नहीं मिल सका। अंत में, एक मानसिक स्वास्थ्य की जांच के रूप में, मैं Form3 विंडोज फार्म वर्ग से विरासत के लिए बदल दिया:

System.Windows.Forms.Form 

तब मैं डिजाइनर में Form3 फिर से खोल दी, और ऐसा लगता है (जैसा कि मैंने उम्मीद)। मैंने फॉर्म 2 को फॉर्म 2 से उत्तराधिकारी में बदल दिया और डिजाइनर में फॉर्म 3 को फिर से खोल दिया। और यह काम किया।

# यादृच्छिक बग ठीक-जीत

गुड लक!

0

मैंने इस स्थिति को दूर करने के लिए अपने समाधान को साफ और पुनर्निर्मित किया।

भी देखें कि क्या आप फ़ॉर्म के लिए है और यह भी Windows.Forms से KeyEvent या MouseEvent का उपयोग कर सुनिश्चित करें कि आप Windows.Forms.KeyEventArgs या Windows.Forms.MouseEventArgs द्वारा इस आर्ग फोन विस्तारित वर्ग का इस्तेमाल किया।

1

यह मेरे लिए काम करता है हालांकि मैं अभी भी बेहतर समझना चाहता हूं कि क्या गलत हो रहा था। मैं विजुअल स्टूडियो में विरासत में फॉर्म बना रहा था। स्पष्ट रूप से विजुअल स्टूडियो डिजाइनर फॉर्म को प्रदर्शित करने से पहले लोड फ़ंक्शन को कॉल करता है। पैरेंट विंडो में लोड फ़ंक्शन को फ़ॉर्म पर नियंत्रण और एक्सेस करने के लिए कहा जा रहा था, यह किसी ऑब्जेक्ट संदर्भ को फेंक रहा था जो ऑब्जेक्ट (क्यों?) के उदाहरण पर सेट नहीं है।

मेरे लिए समाधान पैरेंट फॉर्म लोड फ़ंक्शन की शुरुआत में कोड की निम्न पंक्ति जोड़ना था। मैं वीबी का उपयोग कर रहा हूं लेकिन यह सी # के समान है।

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    If (DesignMode) Then Exit Sub 
+0

मेरे मामले में माता-पिता के ऑनलोड में कोड लेआउट को पुनर्स्थापित करना था। जाहिर है, यह WinForms डिजाइनर के साथ अच्छी तरह से काम नहीं किया। –

संबंधित मुद्दे