🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

3回答

4470閲覧

C#にて英語文の英単語を適当な位置で改行させる方法

tride

総合スコア68

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

1クリップ

投稿2020/01/07 06:48

編集2020/01/08 01:53

ユーザーが自由に入力した英語文があったとして、それを適当な位置(例えばテキストボックスの幅)で改行するにはどうすればいいでしょうか。
何も考えずに改行させた場合、英単語の途中で改行(Word breakとかいうもの?)すると思います。
一定文字数以上になったら、スペースを基準に一度だけsplitで区切るという方法は浮かんでいるのですが、それぐらいしか本当にないのかなと。

オープンソースか何かでライブラリでもありそうな気がするのですが、今のところ見つかっていません。
ご存知の方、おられませんでしょうか。

追記:
修正依頼がありましたので、以下に例示します。
尚、ご指摘にありました表示方法については、返答にもあります通り、文字列操作で済むだろうと思っていたので、とりあえず3パターンを考えてみました。
可否すら分かっていないので

例文:"My name is Tranp."という半角の文字が入力されたとします。

<横幅5文字しか表示しないテキストボックスの場合>

[My name is Tranp.] ↓ [My nam<改行> e is Tranp]

ユーザーが入力時に表示が変わります。

<横幅5文字しか表示しないラベルの場合>

[My name is Tranp.] ↓ [My nam<改行> e is Tranp]

表示時に変わります。

<5文字程度の表示幅しかない画像に文字列を張り付ける場合>
結果はラベルの時と同じ
方法は以下URLのやり方を想定。
https://dobon.net/vb/dotnet/graphics/drawstring.html

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

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

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

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

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

takabosoft

2020/01/07 07:29

もう少し具体例を挙げて、なにをしたいのかを書いてください。
Zuishin

2020/01/07 09:35

「例えば」というのがきな臭いですね。TextBox を使うか他の方法で表示するかでずいぶんと方法が変わりますし、任意の幅で切るかどうかによっても違います。
tride

2020/01/08 01:54

>takabosoftさん 修正いたしました。 >Zuisihinさん "文字列の操作"で要件を満たせる、という意識だったので表示の仕方で変わるとは思っていませんでした。 具体的な例を追記させていただきました。
YAmaGNZ

2020/01/08 02:13

WordWrapプロパティをtrueにした時とは違うのでしょうか?
KOZ6.0

2020/01/08 05:10

ハイフネーションに似たことがやりたいのではないかと思われます。 「英語における改行ルール」 https://www.toishi.info/email/hyphen.html Label はともかく TextBox でやるのは困難かと。 TeX でやっているらしいので、ソース解析すれば出来るかも。 「ハイフネーションアルゴリズム」 https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%95%E3%83%8D%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
tride

2020/01/10 06:42

>YAmaGNZ 私のほうに、できないと勝手に思い違いをしておりました。 >KOZ6.0 ハイフネーションという単語は初めて知りました。 教えていただいたURLを見させていただきます。
guest

回答3

0

長い文字列を何らかの表示域に表示する処理において,文字列の描画結果幅が表示域の幅よりも大きくなる場合には複数行で表示するが,その場合に改行する位置を文字列内のスペースの位置にしたい…ということでしょうか?

とりあえず文字列をスペースで区切って単語単位にバラバラにした状態(概念的に.実際にデータとしてバラすかどうかは別)からスタートして,
今の行に次の単語を繋いだら表示域の幅を超えてしまうかどうか?を調べて,今の行の末尾にくっつけるか改行するかを判定していけばよいのではないかと思います.
WinFormsならTextRenderer.MeasureTextに文字列とフォントとを与えれば文字列の描画サイズの幅を調べることができます.

(1つの単語で表示域の幅を超える場合にはどうするんだろう?)

投稿2020/01/07 09:32

編集2020/01/07 09:34
fana

総合スコア11985

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

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

tride

2020/01/08 01:31

その通りです。 TextRenderer.MeasureTextは知らなかったので、少し検討してみたいと思います。
guest

0

ベストアンサー

追記を読んでも何をしたいのかよくわからないのですが、Windows FormsでもTextBoxのMultilineをtrueにするだけで、デフォルトでテキストがラップされ、勝手に良い感じのところで改行してくれます。

イメージ説明

「適当な位置で改行させたい」のは、どんな背景があるのでしょうか?
Graphicsで描画する時の話ですか?
今何をしていて、どこで躓いているのかこちらには全く伝わっていません。

投稿2020/01/08 02:36

takabosoft

総合スコア8356

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

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

tride

2020/01/10 06:39

・・・(゜◇゜) そんなことは標準の機能でできないと勝手に思い込んでおりました。 ええと、経緯としては試しに画像に英文を画像として張り付けるときに、そういえば改行は幅で切ってしまうから、どうするんだろうとざっくり思いついた程度だったので、そもそもの他の表示部分についての理解が薄かったみたいです。
YAmaGNZ

2020/01/10 07:05 編集

Graphics.DrawStringでもRectangleを指定した場合、単語で折り返されるはずです。 どぼんさんの所の例は日本語表記なので単語で分割されない為に分かりにくいですが、 "私はトランプです。"と表示する時に 私はトラ ンプで す。 という感じで ”。”とその前の文字が一緒に改行されます。
tride

2020/01/10 07:30

゜(゜◇ ) 自分が作ったサンプルにて、いくつかの英文で確認したところ、普通にできました。 原因は、私が単語の区切りを間違えて読んでいたことで、誤解したようです。 一通り記号を混ぜて試したりしてもできたので、完全なる私の誤解だったようです。
tride

2020/01/10 07:35

解決となりましたので、誤解の解消のきっかけになったtakabosoftさんにベストアンサーを送りたいと思います。 気持ち的に一番驚いたのは、YAmaGNZさんだったのですが、回答としてはなかったので、そうさせていただくことにします。
guest

0

WPFのTextBlockTextWrappingWrapにすれば単語の途中では改行されません。

投稿2020/01/07 09:21

cpthgli

総合スコア76

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

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

tride

2020/01/08 01:32

それは知りませんでした。 今回はWinformsの話で、WPFの話ではありませんが知らなかったので参考になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問