Bonjour à tous.
J'essaie de réaliser une boite de texte de "Debug" (classique je pense): c'est une richTextBox dans laquelle je souhaite pouvoir envoyer
1. ce qui sort normalement sur la console (Console.Writeline(string)),
2. ce que j'y envoie avec Trace.WriteLine(string)
3. d'autres trucs que je pourrais rajouter...

Pour 1. j'ai un champ TextWriter sur lequel je dirige la sortie console (Console.SetOut(TextWriter) je crois)
Pour 2. j'ai un Listener que j'hérite de TraceListener...

Tout ça marche bien mais là j'essaie de mettre tout ça dans un seul composant comme ça j'aurai pas à me fatiguer à tout refaire le prochain coup

voici le code (sous VS2008):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
 
namespace myHandyControls
{
    public partial class DebugWindow : UserControl
    {
        public TextListener Listener;
 
        public FeedBackWriter ConsoleRedirect;
 
        private class TextListener : TraceListener
        {
            private DebugWindow enclosingClass;   
 
 
            public TextListener(DebugWindow enclosingClass)
            {
                this.enclosingClass = enclosingClass;
            }
 
 
            public override void Write(string message)
            {
                enclosingClass.Write(message);
            }
 
 
            public override void WriteLine(string message)
            {
                enclosingClass.WriteLine(message);
            }
        }
 
        private class FeedBackWriter : TextWriter
        {
            private DebugWindow enclosingClass;
 
 
            public FeedBackWriter(DebugWindow enclosingClass)
            {
                this.enclosingClass = enclosingClass;
            }
 
 
            public override Encoding Encoding
            {
                get { return Encoding.Default; }
            }
 
 
            public override void Write(string message)
            {
                enclosingClass.Write(message);                
            }
 
 
            public override void WriteLine(string message)
            {
                enclosingClass.WriteLine(message);
            }            
        }
 
 
        public DebugWindow()
        {
            InitializeComponent();
 
            Listener = new TextListener(this);
 
            ConsoleRedirect = new FeedBackWriter(this);
        }
 
 
        private void Write(string message)
        {
            if (outputBox.InvokeRequired)
            {
                outputBox.BeginInvoke(new Invoker(Write), message);
                return;
            }
            else 
            {
                outputBox.ScrollToCaret();
                outputBox.AppendText(message);               
            }            
        }
 
 
        private void WriteLine(string message)
        {
            if (outputBox.InvokeRequired)
            {
                outputBox.InvokeRequired(new Invoker(WriteLine), message);
                return;
            }
            else
            {
                Write(message);
                outputBox.AppendText("\n");
            }
        }
 
 
        private delegate void Invoker(string aString);
    }
}
tel quel ça compile pas.

En fait j'aimerai qu'un client de DebugWindow ne puisse pas instancier TextListener ni FeedBackWriter donc c'est "private".
Sauf que le compilo en veut pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Erreur	1	Accessibilité incohérente*: le type de champ 'myHandyControls.DebugWindow.TextListener' est moins accessible que le champ 'myHandyControls.DebugWindow.Listener'
et idem pour l'autre classe "private".

Comment faire pour que mes classes imbriquées soient cachées au client mais que des instances de ces classes puissent être utilisables de l'extérieur ?

Merci.