2011-10-17 90 views
2

使用鼠標或箭頭鍵+ shift選擇RichTextBox中的文本時,可以在字符串末尾選擇一個額外的空白字符。要重現:RichTextBox字符串末尾不可見的可選字符

  • 類型在RichTextBox

  • 幾個字符(或什麼都沒有)光標設置爲字符串

  • 保持班次結束,然後按右箭頭鍵

您會看到出現一個窄的高亮顯示的選擇,它不能被刪除。

這會導致我的應用程序出現問題,因爲SelectionFont屬性在附加字符與某些有效文本一起選擇時返回null。關於如何禁用這個額外字符的任何想法,或者解決它呢?

C#的WinForms,Visual Studio 2010中

+0

它是一個實際的性格嗎?如同,如果你把整個字符串和修剪結束(或子字符串1),它在那裏? – Haedrian

+0

我不認爲這是一個真正的人物。如果我只查看RichTextBox的屬性,只選擇了額外的字符,SelectedText返回一個空字符串,SelectionLength爲0,SelectionType爲'Empty'。此外,RichTextBox的TextLength屬性不包含此額外字符。 – jayarr

回答

0

在2010年發射的工作室了一個新的WinForms應用程序,是不是真的能夠重現此。我可以選擇看不見的'角色',但它不會給我帶來任何問題。 SelectedFont仍然爲我返回一個有效的對象。我可以沒有問題地獲得文本。

+1

如上所述,'額外字符'似乎不是實際字符,只是與RichTextBox控件相關的UI工件。我不認爲字符串操作會在這裏完成任何事情。 – jayarr

+0

我想我不明白你在做什麼。我認爲你從文本框中獲得了價值,並且有能力驗證它的正確性。 –

+0

他對所選「文本」的值沒有任何問題,而是關於其字體。 – TheBlastOne

0

有趣。(這是豪斯醫生,醫學博士說。)

沒事的時候在一個空的RTF編輯控件被選中,SelectedRtf回報:

"{\rtf1\ansi\ansicpg1252\deff0\deflang2055\uc1 }" 

當「幽靈」的東西是在所選空RTF編輯控件,SelectedRtf回報:

"{\rtf1\ansi\ansicpg1252\deff0\deflang2055{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}} 
\viewkind4\uc1\pard\f0\fs17\par 
}" 

當然,SelectedText返回在兩種情況下空字符串。

所以我懷疑選擇什麼是metainfo,確保新輸入的文本,將取代空的選擇將插入正確的字體

但是,這似乎是無稽之談,因爲即使沒有選擇任何內容,新輸入的文本也會插入正確的字體。

所以這一切都沒有意義。 (好吧,它確實有點 - 看最後一段)

這使我相信這是一個錯誤,或者至少在RichTextBox中有一個小故障。

格式化信息可能是由選擇例程創建的,它確保選定的非空文本將被新格式化的文本替換爲格式化爲與替換文本相同的格式。爲此,即使未選擇文本,選擇內容也必須包含格式信息。我認爲。也許可以預先選擇一個字符和段落格式與默認格式不同,然後鍵入文本使用該格式。

0

控件的SelectionFont屬性只能返回單個字體。如果所選範圍包含多個字體,則閱讀SelectionFont屬性將拋出NullReferenceException

最有可能發生的情況是RichTextBoxFont屬性與您在選定範圍上使用的當前字體不同。最後選擇的「額外」字符是您的Font屬性,而不是您的SelectionFont屬性。

如果您的RichTextBox只使用一種字體,請確保FontSelectionFont屬性相同。

否則,只檢查它是否爲空:

if (richTextBox1.SelectionFont != null) { 
    //do something 
}