none
RichTextExに文書を表示させる方法 RRS feed

  • 質問

  • https://social.msdn.microsoft.com/Forums/ja-JP/de949530-1735-43c4-93e1-59d2f7be33b2/richtextbox1239512486124611247312488124343229426360123652636024335?forum=vsgeneralja

    以上のを参考にし、RichTextBoxから継承してRichTextExを作成しVerticalTextプロパティを実装しました。

            private void button1_Click(object sender, EventArgs e)
            {
                //テキスト読み込み
                if (sender == button1)
                {
                    OpenFileDialog ofd = new OpenFileDialog();
                    ofd.Filter = "テキストファイル|*.txt";
                    if (ofd.ShowDialog() == DialogResult.OK)
                    {
                        StreamReader sr = new StreamReader(ofd.FileName, Encoding.GetEncoding("Shift_JIS"));
    
    //RichTextEx に文書を表示させたい
                        myText.Text = sr.ReadToEnd();
                        
                    }
                }
            }

    このようにopenfiledialogでパソコン内にある文章を縦書き表示させたRichTextExのmyTextにパソコン内にある文章を表示させたいのですが、読み取られません。

    どうすればよろしいのでしょうか。

    また、あらかじめrichTextBox1を追加していたのですがこちらを縦書きにすることは可能でしょうか。

    2018年11月22日 12:14

すべての返信

  • 15146さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    上記の件につきまして、ご記載したコードでテストすると、カスタムコントロール(RichTextEx)はテキストを読み取れて、縦書き表示できました。
    それ以上の情報なしにどこから問題が発生したのかを推測することは難しいですが、目的を達成するには、以下の手順を参照してください。

    ステップ1:プロジェクトにRichTextExというカスタムクラスを作成する。

    public class RichTextEx : RichTextBox

        {

            [DllImport("kernel32.dll")]

            private static extern IntPtr LoadLibrary(string path);

            [DllImport("User32.dll")]

            private static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

            private const uint EM_SETOPTIONS = 0x44d;

            private const uint EM_GETOPTIONS = 0x44e;

            private const int ECOOP_SET = 0x1;

            private const int ECOOP_OR = 0x2;

            private const int ECOOP_AND = 0x3;

            private const int ECOOP_XOR = 0x4;

            private const int ES_VERTICAL = 0x400000;

            protected override CreateParams CreateParams

            {

                get

                {

                    LoadLibrary("msftedit.dll");

                    CreateParams createParams = base.CreateParams;

                    createParams.ClassName = "RichEdit50W";

                    return createParams;

                }

            }

            public virtual bool VerticalText

            {

                get

                {

                    int ret = SendMessage(this.Handle, EM_GETOPTIONS, 0, 0);

                    if ((ret & ES_VERTICAL) != 0) return true; else return false;

                }

                set

                {

                    if (value == true)

                    {

                        SendMessage(this.Handle, EM_SETOPTIONS, ECOOP_OR, ES_VERTICAL);

                    }

                    else

                    {

                        SendMessage(this.Handle, EM_SETOPTIONS, ECOOP_AND, ~ES_VERTICAL);

                    }

                }

            }

        }



    ステップ2:ソリューションを構築する(重要)。ツールボックスに新しいコントロールがあることを確認し、それをフォームにドラッグします。


    ステップ3:VerticalTextプロパティをtrueに設定します。

        public Form1()

        {

            InitializeComponent();

            richTextEx1.VerticalText = true;

        }


    ステップ 4: ボタンでデータをロードする:

        private void button1_Click(object sender, EventArgs e)

        {

            //テキスト読み込み

            if (sender == button1)

            {

                OpenFileDialog ofd = new OpenFileDialog();

                ofd.Filter = "テキストファイル|*.txt";

                if (ofd.ShowDialog() == DialogResult.OK)

                {

                    StreamReader sr = new StreamReader(ofd.FileName, Encoding.GetEncoding("Shift_JIS"));

                    //RichTextEx に文書を表示させたい

                    richTextEx1.Text = sr.ReadToEnd();

                }

            }

        }

    結果:

    どうぞよろしくお願いします。


    ~ 参考になった投稿には回答としてマークの設定にご協力ください ~
    MSDN Community Support Haruka

    2018年12月13日 5:42
    モデレータ