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):
tel quel ça compile pas.
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); } }
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:
et idem pour l'autre classe "private".
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'
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.
Partager