質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

2回答

447閲覧

作成したRichTextExに文章を表示したい

syo46no

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/11/25 03:13

編集2022/01/12 10:55

RichTextBoxにテキストを縦書き書式で表示する方法

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

C#

1 2 public Form1() 3 { 4 InitializeComponent(); 5 6 //縦書きrichTextboxの作成 7 RichTextEx myText= new RichTextEx(); 8 myText.VerticalText = true; 9 myText.Location = new Point(25,25); 10 myText.Size = new Size(355,722); 11 this.Controls.Add(myText); 12 } 13 14 //richTextboxを縦書きにする操作 15 public class RichTextEx : RichTextBox 16 { 17 [DllImport("kernel32.dll")] 18 private static extern IntPtr LoadLibrary(string path); 19 20 [DllImport("User32.dll")] 21 private static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int IParam); 22 23 private const uint EM_SETOPTIONS = 0x44d; 24 private const uint EM_GETOPTIONS = 0x44e; 25 private const int ECOOP_SET = 0x1; 26 private const int ECOOP_OR = 0x2; 27 private const int ECOOP_AND = 0x3; 28 private const int ECOOP_XOR = 0x4; 29 private const int ES_VERTICAL = 0x400000; 30 31 protected override CreateParams CreateParams 32 { 33 get 34 { 35 LoadLibrary("msftedit.dll"); 36 CreateParams createParams = base.CreateParams; 37 createParams.ClassName = "RichEdit50W"; 38 return createParams; 39 } 40 } 41 42 public virtual bool VerticalText 43 { 44 get 45 { 46 int ret = SendMessage(this.Handle, EM_GETOPTIONS, 0, 0); 47 if ((ret & ES_VERTICAL) != 0) return true; else return false; 48 } 49 set 50 { 51 if (value == true) 52 { 53 SendMessage(this.Handle, EM_SETOPTIONS, ECOOP_OR, ES_VERTICAL); 54 } 55 else 56 { 57 SendMessage(this.Handle, EM_SETOPTIONS, ECOOP_AND, ~ES_VERTICAL); 58 } 59 } 60 } 61 } 62 63

左の赤が実行時に出てくる作成したmyText、右があらかじめ作成したrichTextBox1
この左のmyTextに文書を表示させたいです。

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

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

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/11/25 03:50

読み取られないとはどうなるのでしょうか。エラーが出るならエラーメッセージを提示してください
syo46no

2018/11/25 03:57

CS0103 現在のコンテキストに 'myText' という名前は存在しません というエラーが出ます。このプログラムを実行したときのみ縦書きのmyTextが現れ、それ以外では出てこないので何もできないです。
y_waiwai

2018/11/25 04:07

今のフォームにどうやってmyTextを配置したんでしょうか。そこんところのソースコードも提示してください
syo46no

2018/11/25 04:17

少しコードの追加と現在の画面にについて追加させていただきました。拙い文章ですが、ご教授お願いいたします。
syo46no

2018/11/25 04:21

myTextはプログラム上には存在するのですが、デザイン配置には現れず、実行時のみの出現となります。
guest

回答2

0

myTextの宣言位置が悪いです。
コンストラクタ内での宣言ではなく、フィールド変数として宣言してください。

投稿2018/11/25 04:24

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syo46no

2018/11/25 04:54

すみません、 public Form1() { InitializeComponent(); //縦書きrichTextboxの作成 RichTextEx myText= new RichTextEx(); myText.VerticalText = true; myText.Location = new Point(25,25); myText.Size = new Size(355,722); this.Controls.Add(myText); } ではなく、 public ~で作成してその中に記述すればいいのでしょうか。 申し訳ありません。お願いします。
YAmaGNZ

2018/11/25 05:28

「フィールド変数」という言葉が分からないのですよね?検索しましょう。 また、変数のスコープについても学習してください。
syo46no

2018/11/25 09:17

勉強不足でした。解決いたしました。ありがとうございました。
guest

0

関数の中で定義した変数は関数の中でしか有効ではありません

関数の外で定義しましょうねっ

投稿2018/11/25 05:47

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syo46no

2018/11/25 09:17

勉強不足でした。解決いたしました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問