0

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
    }
}
4

0 に答える 0