バグでは無いのですが、バグのように見える現象が発生するので、対処方法も含めて説明します(汗)。
それと、新たな「WordPress サーバー」が決まりましたので、報告して置きます。ただし今から、「新しいテーマ」の勉強なので、三ヶ月は掛かると思います。m(_ _)m
新たなサーバーでは、この続きを行いたいと思っていますが、ここに書いてあることは再現出来ないので、此処にしかありません。
ですから、ここで十分理解しておくと、新たなサーバーでの事が、スムーズに理解できると思います。
実は、TextBox には、一行が 1024 文字という制限があります。これを超えると、「見た目上」自動的に改行されます。「Notepad」には、その制限がありません。流石ですね(Nice)。
テキストの文字列自体は、改行されていないのですが、(改行文字は追加されていません)、画面上は改行されてしまいます。
これは、「WordWrap = false」の時にそうなります。「1024 文字単位」でそうなります。
「WordWrap = true」の時は、改行はされないのですが、「1024 文字単位」で改行と見なされるので、改行もされていないのに行番号が、表示されてしまいます。
非常に不思議な現象が起こるので、バグだと思うかも知れません。私も最初は、バグかな?と思って、デバッグして見ました。
結論から言うと、「C# の TextBox」は、本来「テキストエディター」用には作成されていないので、「一行が 1024 文字」というのは、仕様なんですね。
ですから、「TextBox」のバグではありません。具体的には、「.GetLineFromCharIndex()」が、1024 文字単位なんですね。
それ以外の「プロパティ」や「メソッド」は、大丈夫です。
回避する方法は、C#的に言えば、「TextBox」を「RichTextBox」に変更すれば、全ての問題は回避できます。
「Undo / Redo」も出来るようになります。本来、テキストエディター用に作られているので頼もしいですね(笑)。
「TextBox」を置き換える場合は、「ScrollTextBox クラス」の継承元を、RichTextBox にすれば良いです。
後は、ScrollBars のプロパティを、RichTextBox 用にすれば(再設定)、前回のコードを変更することなく動きます。
補足として、「RichTextBox.LanguageOption = RichTextBoxLanguageOptions.UIFonts;」にすると、TextBox と同じ形式になります。
また、前回のコードは、一行の高さが固定用なので、可変用には対応していません。
それと最後に、「クラス名」と「インスタンス名」は、同じでも良いのですが、また間違うことも無いのですが、機能名を先頭にすると、より分かり易くなります。
前回のコードで言えば、「ScrollTextBox」はクラス名でもあり、インスタンス名でもありました。
それを、「EditScrollTextBox」とか「MyScrollTextBox」とかにすると、より分かり易くなります(笑)。
以上です。まぁ出来ることも重要なんですが、出来ないことが分かるのも、経験則になりますね。
ただ、今回の現象は、かなり究極の場合だと思います。例えば、機械的に作成した文章とか、改行文字を含まないデータとかだと思います。
人が書いた文章で、改行文字を含まないで、一行が 1024 文字を超えるというのは、多分無いと思います(笑)。
ですから、日常使いの場合は、このまま「TextBox」でも、十分大丈夫だと思います。m(_ _)m
それではこの辺で、ごきげんよう。
【このカテゴリーの最新記事】
-
no image
-
no image