我正在创建一个FTP客户端,我希望通过输出调试信息将响应输出到RichTextBox。
有人能帮忙解决这个问题吗?感谢
public FileARK()
{
InitializeComponent();
hostAddress.Text = "host";
UserName.Text = "foo";
Password.Text = "bar";
//FtpTrace.AddListener(new TextWriterTraceListener(responseWindow.Text));
// Debug.WriteLine(responseWindow.Text);
}
private void Connect_Click(object sender, EventArgs e)
{
conn = new FtpClient();
conn.Host = hostAddress.Text;
conn.Credentials = new NetworkCredential(UserName.Text, Password.Text);
conn.Connect();
}
private void Disconnect_Click(object sender, EventArgs e)
{
conn.Disconnect();
}
private void responseWindow_TextChanged(object sender, EventArgs e)
{
}
答案 0 :(得分:2)
您可以实现在app.config中配置的自己的TraceListener
,并动态尝试查找与配置中的名称匹配的richtextbox。
你的课程可能如下所示:
public class TextBoxListener : TraceListener
{
RichTextBox _box;
string _data;
public TextBoxListener(string initializeData)
{
_data = initializeData;
}
private bool Init()
{
if (_box != null && _box.IsDisposed )
{
// back to null if the control is disposed
_box = null;
}
// find the logger text box
if (_box == null)
{
// open forms
foreach (Form f in Application.OpenForms)
{
// controls on those forms
foreach (Control c in f.Controls)
{
// does the name match
if (c.Name == _data && c is RichTextBox)
{
// found one!
_box = (RichTextBox) c;
break;
}
}
}
}
return _box != null && !_box.IsDisposed;
}
public override void WriteLine(string message)
{
if (Init())
{
_box.Text = _box.Text + message + "\r\n";
}
}
public override void Write(string message)
{
if (Init())
{
_box.Text = _box.Text + message;
}
}
}
此类最重要的部分是Init
方法,它遍历所有openforms和所有控件,以查找与app.config中配置的名称相匹配的richtextbox控件。
要使用此类,请在app.config和add a listener
中配置跟踪<system.diagnostics>
<trace>
<listeners>
<add name="box"
type="WindowsFormsApplication1.TextBoxListener, WindowsFormsApplication1"
initializeData="loggerRTB" />
</listeners>
</trace>
</system.diagnostics>
类型是类的完全限定类型名称(Namespace.Classname,AssemblyName),在initializeData中,您将在表单上添加richtextbox控件的名称。在我的示例应用中,它是 loggerRTB 。
在您的应用中,您现在可以使用标准Trace
课程:
Trace.WriteLine("Hello world");
请注意,TextBoxListener
仅在第一次调用Trace.WriteLine
时实例化。
这种方法的一个好处是可以添加多个写入不同RichTextBox控件的Listener,甚至可以在不同的表单上(假设这些表单是打开的)。