C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: WordWrapなしのRichTextで折り返しが起きる


(過去ログ 78 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■46310 / inTopicNo.1)  WordWrapなしのRichTextで折り返しが起きる
  
□投稿者/ ttn (1回)-(2010/01/29(Fri) 20:53:53)

分類:[C#] 

Visual Studio 2005,C#を使ってWindows XP向けGUIを作っています。

RichTextをReadonly=true, Wordwrap=falseに設定し,
StreamReaderでファイルから読み込んだstring配列をLinesに代入して表示させています。

通常は問題なく動作しているのですが,
テストに使用したファイルの中に,1行が18000文字を超えるものがありました。
このファイルを読み込むと,Wordwrap=falseなのに折り返しが起きてしまいました。

何時間かかけて検索したのですが,キーワードが悪いのか情報を見つけることが出来ず,
いつも(ROMですが)お世話になっているわんくま同盟の皆様におすがりします。

質問1) RichTextの1行あたりの文字数を本当に「無限」にして
1行が何文字であっても本当に折り返さないようにすることは出来ないのでしょうか。

質問2) もし,どうしても1行あたりの文字数の上限を動かせないのであれば,
その文字数は何文字になるのでしょうか? どこかにその根拠は公表されていますか?

よろしくお願いします。

----
以下,自分の予想。
・.NETクラスの元である,Win32コントロールの制限が原因なので,本当の「折り返しなし」は出来ないのでは。
----
引用返信 編集キー/
■46314 / inTopicNo.2)  Re[1]: WordWrapなしのRichTextで折り返しが起きる
□投稿者/ .SHO (1177回)-(2010/01/29(Fri) 21:07:30)
No46310 (ttn さん) に返信

> 質問2) もし,どうしても1行あたりの文字数の上限を動かせないのであれば,
> その文字数は何文字になるのでしょうか? どこかにその根拠は公表されていますか?

「もし…」の話が正しいという前提で、何文字かを知りたいならば
18000文字のファイルの文字数を減らしていけば上限は自分で確認できますね。

引用返信 編集キー/
■46315 / inTopicNo.3)  Re[2]: WordWrapなしのRichTextで折り返しが起きる
□投稿者/ ttn (2回)-(2010/01/29(Fri) 21:17:12)
No46314 (.SHO さん) に返信
> ■No46310 (ttn さん) に返信
> 「もし…」の話が正しいという前提で、何文字かを知りたいならば
> 18000文字のファイルの文字数を減らしていけば上限は自分で確認できますね。

自分で試して「この数字だろう」という推測は出来ますが,
それが仕様なのかどうかは判断が付かないので,
質問2としてあげさせていただきました。

1行あたりの文字数の上限があるということや、
その上限の値がいくらである、
という仕様が公表されていないのであれば、
自分で調べて何とかするしかないのかなと思っています。
ただ、その場合は動作環境が変わるたびに
動作が変わっていないかのチェックをしなければならないので憂鬱です。
引用返信 編集キー/
■46339 / inTopicNo.4)  Re[3]: WordWrapなしのRichTextで折り返しが起きる
□投稿者/ .SHO (1178回)-(2010/01/30(Sat) 12:03:47)
> 自分で試して「この数字だろう」という推測は出来ますが,

ようは、そこまでやってから質問すれば、ってことです。

自分ならまず、上限値を探してみます。
その値が、1000とか1024とか4096みたいなキリのいい値だったら
システム的な上限値を考慮します。
中途半端な値だったら、自分のバグを疑います。

また、上限値を探してるうちにバグがみつかることもあります。

何時間もかかけて検索したということですが、上限値が定まれば
それを検索キーに含めることで、さらに検索が絞り込めます。

言いたいのは、そういうことです。
引用返信 編集キー/
■46381 / inTopicNo.5)  Re[4]: WordWrapなしのRichTextで折り返しが起きる
□投稿者/ ttn (3回)-(2010/02/01(Mon) 11:40:38)
休日中にチェックできず、返信が遅れました。すみません。

No46339 (.SHO さん) に返信
> 自分ならまず、上限値を探してみます。
> その値が、1000とか1024とか4096みたいなキリのいい値だったら
> システム的な上限値を考慮します。
> 中途半端な値だったら、自分のバグを疑います。

RichTextをFormに貼り付け,
Linesに代入しているだけだったので,
そういった点での考慮は抜けていました。
いちおう,新規に起こしたプロジェクトで
FormにRichTextを貼り付け,Wordwrap=falseにして
同様の現象が起きることも確認しました。

上限値は4096のようですが,
RichTextのwordwrapは単語を切らないように折り返すので
常に4096とは限りません。

> 何時間もかかけて検索したということですが、上限値が定まれば
> それを検索キーに含めることで、さらに検索が絞り込めます。

ここに投稿する前に,手元のコードの動作から
4096辺りが怪しいと思って検索ワードの1つとして試してみてあります。
しかし,特にこれと言った情報が見つからなかったので
こちらに質問をすることにしました。
最初に数字をあげなかったのは,
これの前にポストしたように「この動きはRichTextの仕様なのか」
という点に注目していたため,
確実に検証したわけでもない数字は出さないほうがよいかと思いました。
逆に.SHOさんのお時間をとらせてしまい申し訳ありません。

...特に仕様として明確に出ているわけではない感じですね。
引用返信 編集キー/
■46384 / inTopicNo.6)  Re[5]: WordWrapなしのRichTextで折り返しが起きる
□投稿者/ みきぬ (766回)-(2010/02/01(Mon) 15:12:55)
> いちおう,新規に起こしたプロジェクトで
> FormにRichTextを貼り付け,Wordwrap=falseにして
> 同様の現象が起きることも確認しました。
>
> 上限値は4096のようですが,
> RichTextのwordwrapは単語を切らないように折り返すので
> 常に4096とは限りません。
>
こっちでも確認しました。なんででしょね?

とりあえずレベルでよければ、RightMargin プロパティを適当に大きくすればいけると思います。

↓Win32API を使う方法もあるらしいがよくわからなかった。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37654&forum=7
引用返信 編集キー/
■46426 / inTopicNo.7)  Re[6]: WordWrapなしのRichTextで折り返しが起きる
□投稿者/ ttn (4回)-(2010/02/02(Tue) 19:02:22)
アドバイスありがとうございました。

テスト用のRichTextしかないプロジェクトで
RightMarginを大きくしたり
EditWordBreakProcを実装してみたりしたのですが,
4096の壁は越えられませんでした。
残念です。

No46384 (みきぬ さん) に返信
>>いちおう,新規に起こしたプロジェクトで
>>FormにRichTextを貼り付け,Wordwrap=falseにして
>>同様の現象が起きることも確認しました。
>>
>>上限値は4096のようですが,
>>RichTextのwordwrapは単語を切らないように折り返すので
>>常に4096とは限りません。
>>
> こっちでも確認しました。なんででしょね?
>
> とりあえずレベルでよければ、RightMargin プロパティを適当に大きくすればいけると思います。
>
> ↓Win32API を使う方法もあるらしいがよくわからなかった。
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37654&forum=7
引用返信 編集キー/
■46444 / inTopicNo.8)  Re[7]: WordWrapなしのRichTextで折り返しが起きる
□投稿者/ みきぬ (769回)-(2010/02/03(Wed) 09:50:02)
No46426 (ttn さん) に返信
> アドバイスありがとうございました。
>
> テスト用のRichTextしかないプロジェクトで
> RightMarginを大きくしたり
> EditWordBreakProcを実装してみたりしたのですが,
> 4096の壁は越えられませんでした。
> 残念です。
>
あら。私の環境だと↓の値まで1行で表示できたけど。

richTextBox1.RightMargin = 143165576; // 16進で 8888888
richTextBox1.Text = new string('■', 46603);

.NET Framework のバージョンが違うからかしら(うちは Visual Studio 2008)
その辺はわからないけど。
引用返信 編集キー/
■46468 / inTopicNo.9)  Re[8]: WordWrapなしのRichTextで折り返しが起きる
□投稿者/ ttn (5回)-(2010/02/03(Wed) 13:13:36)
昨日の試行ではデザイナ上でRightMarginを指定したので,
みきぬさんのポストを受けて
InitializeComponent()のあとに
RightMarginを0x888888に設定するコードを入れてみました。

手元の2万文字弱のデータは折り返されず,1行になりましたが,
6400+α文字目以降がまともに描画されません。
(文字色が白になったようにも見えるが,
白い部分を選択してみるとその前後の文字が黒で表示されたり...)
αの値は30〜70ぐらいの範囲で,描画のたびに変化します。

マウスで範囲選択をしている間のキャレットの飛び方も不自然です。
(表示範囲よりちょっとでも前に選択範囲を広げようとすると,
行頭までジャンプしてしまう)

一筋縄ではいかない感じがしています。
何度もアドバイスをありがとうございました。

No46444 (みきぬ さん) に返信
> あら。私の環境だと↓の値まで1行で表示できたけど。
>
> richTextBox1.RightMargin = 143165576; // 16進で 8888888
> richTextBox1.Text = new string('■', 46603);


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -