4

を使用して、c# でフラット ファイル リーダー (場合によっては単純な 16 進エディター) を作成していますRichTextBoxes。1 つの RTB は 16 進値を示し、別の RTB は ASCII 値を示します。

私の計画は、1 行に 1 つの「レコード」を表示することです。したがって、長さが 1000 のレコードが 10 個ある場合、ASCII では 1 行あたり 1000 文字の行が 10 行あり、16 進側の長さは 3000 になります。

rtb.RightMarginプロパティを 1 つのレコードの長さに動的に設定します。

私が直面している問題は、レコードが信じられないほど長く、ASCII 側が 3500 文字を超えて 16 進側が非常に大きくなった場合です。右マージンが大きくなると、レコードの途中と最後でテキストが消え始めます。大きすぎる。たとえば、次のようになります。

 hexRtb.RightMargin = 7500 //This is because it's triple the size of the ascii text.

では、hex rtbすべてのテキストが完全に表示されなくなる中央に向かってスクロールを開始するまで、テキストの最初の部分が表示されます。レコードのこれらの空の部分をクリックすると、テキストが表示されますが、スクロールすると再び消えます。

何が起こっているのか理解できません。これは、RightMargin が非常に大きな数値に設定されている場合にのみ発生するようです。数値が小さいほど、すべてのテキストが問題なく表示されます。

誰もこのようなことに遭遇したことがありますか?

これが役立つ場合のコードサンプルです。

int asciiRecordLength = mHexReader.RecordSize;
int hexRecordLength = mHexReader.RecordSize * HexByte; //This is to convert the ascii record length to a hex record length

asciiTextBox.RightMargin = TextRenderer.MeasureText(mHexReader.GetAsciiValues().Substring(0, asciiRecordLength), asciiTextBox.Font).Width;
hexTextBox.RightMargin = TextRenderer.MeasureText(mHexReader.GetHexValues().Substring(0, hexRecordLength), hexTextBox.Font).Width;

//Populate text boxes
hexTextBox.Text += mHexReader.GetHexValues(); //This gets all of the records to be read
asciiTextBox.Text += mHexReader.GetAsciiValues();
4

1 に答える 1

0

私が抱えているのと同じ問題に遭遇した人のために、私はこの問題の回避策を見つけました。

RichTextBoxを使用する代わりに、ScintillaNETと呼ばれるダウンロード可能な別のコントロールを見つけました。これまでのところ、問題なくこのコントロールを使用するようにコードのほとんどを切り替えることができました。一部の関数は少し異なります。たとえば、hextTextBox.Clear()の代わりにhexTextBox.ResetText()であるか、hexTextBox.SelectionStartがhexTextBox.Selection.Startになっています。

わずかな違いがありますが、このコントロールは、レコード長が非常に大きくなるとピクセルが消える問題を修正します。

コードは次の場所からダウンロードできます:http ://scintillanet.codeplex.com/

これが私と同じ問題に遭遇した他の人の助けになることを願っています。

于 2013-03-18T14:45:15.190 に答える