Console.WriteLine リダイレクト メソッドを変更したいと思います。以下は、私が使用していたリダイレクト コードです (完全に動作します) が、//変更されたコメントの間に、必要なことを行わないコードが追加されています。Console.writeline(string) の文字列も別のリストボックスにコピーしたいのですが、リストボックスが変わります。FE さん、今はこんな感じでやってました。 Console.WriteLine("sometext"+"**i"); ここで、どのリストボックスに文字列も書き込む必要があるかを示します。現在のコードは機能していません。コピーする必要がある他のリストボックスには何も表示されず、デフォルトのリストボックスでは行が二重に書き込まれます。以前のバージョンでは、「override WriteLine」と「½」マークを使用しませんでした。代わりに、文字列の末尾を表示するために '\0' をチェックしました (これは以下のコードでコメントアウトされています)。これはしませんでした デフォルトのリストボックスに悪い二重線を入れて、もう一方のリストボックスに何かを書きました。問題は、複数行の文字列を使用すると、最後の行のみが他のリストボックスに追加されることです (ただし、1 行全体がデフォルトのリストボックスに追加されます)。
これを行うより良い方法はありますか?助けてください
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace SefelecTester
{
public class ListBoxWriter : TextWriter//this class redirects console.writeline to debug listbox
{
private delegate void SetTextCallback(string text);
//TextWriter _writer = null;//for TextBoxWriter
private ListBox list;
//modified
private ListBox list2;
private ListBox list3;
private int select=0;
//--modified
private StringBuilder content = new StringBuilder();
public ListBoxWriter(ListBox list, ListBox list2, ListBox list3)
{
this.list = list;
//modified
this.list2 = list2;
this.list3 = list3;
//--modified
}
private void SetText(string text)
{
//this.rtbIncoming.Text += text;
Console.WriteLine(text);
}
public override void Write(char value)
{
base.Write(value);
content.Append(value);
//modified
if (value == '½')
//if (value == '\0')//previous version
{
this.list.Invoke(new MethodInvoker(() => list.Items.Add(content.ToString())));
select = 0;
return;//not in previous version
}
if (select!=1 ||select!=2)
{
if (select == 10)
{
this.list.Invoke(new MethodInvoker(() => list.Items.Add(content.ToString())));
select = (int)Char.GetNumericValue(value);
}
else if (value == '*' && select == 5)
{
this.list.Invoke(new MethodInvoker(() => list.Items.Add(content.ToString())));
select = 10;
}
else if (value == '*')
{
this.list.Invoke(new MethodInvoker(() => list.Items.Add(content.ToString())));
select = 5;
}
}
//--modified
if (value == '\n')
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.list.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
//this.Invoke(d, new object[] { content.ToString() });
try
{
this.list.Invoke(new MethodInvoker(() => list.Items.Add(content.ToString())));
this.list.Invoke(new MethodInvoker(() => list.SelectedIndex = list.Items.Count - 1));
this.list.Invoke(new MethodInvoker(() => list.SelectedIndex = -1));
}
catch (ObjectDisposedException ex)
{
Console.WriteLine("Exception raised(" + ex.Message + "): " + ex);
}
}
else
{
list.Items.Add(content.ToString());
list.SelectedIndex = list.Items.Count - 1;
list.SelectedIndex = -1;
}
//modified
if(select>0)
{
if(select==1)
{
if (this.list2.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
//this.Invoke(d, new object[] { content.ToString() });
try
{
this.list2.Invoke(new MethodInvoker(() => list2.Items.Add(content.ToString())));
this.list2.Invoke(new MethodInvoker(() => list2.SelectedIndex = list2.Items.Count - 1));
this.list2.Invoke(new MethodInvoker(() => list2.SelectedIndex = -1));
}
catch (ObjectDisposedException ex)
{
Console.WriteLine("Exception raised(" + ex.Message + "): " + ex);
}
}
else
{
list2.Items.Add(content.ToString());
list2.SelectedIndex = list2.Items.Count - 1;
list2.SelectedIndex = -1;
}
}
else if(select==2)
{
if (this.list.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
//this.Invoke(d, new object[] { content.ToString() });
try
{
this.list3.Invoke(new MethodInvoker(() => list3.Items.Add(content.ToString())));
this.list3.Invoke(new MethodInvoker(() => list3.SelectedIndex = list3.Items.Count - 1));
this.list3.Invoke(new MethodInvoker(() => list3.SelectedIndex = -1));
}
catch (ObjectDisposedException ex)
{
Console.WriteLine("Exception raised(" + ex.Message + "): " + ex);
}
}
else
{
list3.Items.Add(content.ToString());
list3.SelectedIndex = list3.Items.Count - 1;
list3.SelectedIndex = -1;
}
}
}
//--modified
//list.Items.Add(content.ToString());
content = new StringBuilder();
}
}
public override Encoding Encoding
{
get { return System.Text.Encoding.UTF8; }
}
//modified
public override void WriteLine(string text)
{
base.WriteLine(text+"½");
return;
}
//--modified
}
}