2013-02-27 110 views
4

我使用RichTextBoxes在c#中創建了一個平面文件閱讀器(如果您願意,可以使用簡單的十六進制編輯器)。一個RTB顯示十六進制值,另一個顯示ASCII值。爲什麼文本在RichTextBox中消失?

我的計劃是每行顯示一條「記錄」。因此,如果有10條記錄我想要查看的長度爲1000,那麼在ASCII中每行將有10行1000個字符,並且十六進制長度將爲3000.

我動態設置rtb.RightMargin屬性爲一條記錄的長度。

我遇到的問題是,當記錄非常長,超過3500字符的ascii方使十六邊非常大,我發現文本開始消失在記錄的中間和結束時右邊距變得太大。因此,例如:

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(); 
+0

你能說出哪些字符丟失了嗎?我的意思是字符實際上是回車符,空格,空字符等,實際上是以ASCII碼顯示的? – tmwoods 2013-02-27 18:16:26

+0

你也有水平滾動條嗎? – 2013-02-27 18:18:19

+0

是的,我有一個水平滾動條。它們都是可打印的字符,所以它們不是回車,空值或任何東西。據我所知,發生的事情是,角色的像素不在那裏。意思是,它會顯示一半的一半,但不顯示另一半。然後,該行的其餘部分也將保持空白。我將點擊顯示的一半數字,該行的更多內容將重新出現。這是我看不到的像素。 – 2013-02-27 19:01:31

回答

0

對於那些遇到同樣問題的人,我找到了解決此問題的方法。

代替使用RichTextBox,我發現了另一個可以下載的控件ScintillaNET。到目前爲止,我已經能夠將大部分代碼切換到使用此控件而沒有任何問題。一些功能稍有不同,例如,而不是hextTextBox.Clear()它是hexTextBox.ResetText(),或者是hexTextBox.SelectionStart現在是hexTextBox.Selection.Start。

微小的差異,但是這個控件解決了當記錄長度變得非常大時像素消失的問題。 http://scintillanet.codeplex.com/

希望這有助於其他人誰遇到了我有同樣的問題:

的代碼可以從以下網站下載。