關於WPF中TextBox行的選擇與顯示的問題

2021-06-25 08:09:34 字數 742 閱讀 3456

最近做了乙個小工具,其中用到了wpf中的textbox控制項。對於這個控制項的使用,其中主要的乙個功能是需要選擇指定的行,並將其顯示在控制項可見區域的檢視中(如果不在可視區域時,需要控制項自動滾動到改行)。在我使用時,發現乙個問題,如果當我先將指定的行滾動至檢視中,然後在將其選中,則經常會不穩定,有時能定位並選中,有時則會選中錯誤位置,或者報錯。現在我想將我遇到的問題以**的方式進行說明,以及我的解決方案。不過,目前其原因還未搞明白,如果有高人,還請給予指點。

首先,在自定義控制項中新增乙個textbox控制項,命名為txtboxdocument,並在控制項中提供兩個公共方法gotoline(int rowindex)和selectedline(int rowindex),用來定位並滾動至指定行和選中改行。

但是,採用正確的呼叫順序的方式不論是getlinetext(rowindex).length方式獲取指定行的文字長度還是使用getlinelength(rowindex)方式獲取指定行的文字長度,都是沒問題的。具體緣由尚不明確,也沒有查到相關的資料介紹。我自己的理解是在進行scrolltoline(rowindex)操作之前,先選中指定行的文字,此時,文字內容沒有進行滾動,是個靜止的狀態,當先進行滾動在去選中指定文字,文字內容是個動態滾動的,可能此時.net執行時需要做某些處理,因此,此時去獲取指定行的文字長度或文字內容則容易出現問題。另外,認為文字內容滾動之後對於在可視範圍內顯示的文字相對於文字框的上邊界的距離發生了變化,這也有可能是乙個因素。不知道猜測是否正確,還希望各位大俠、專家給予指正,也好將其原理分享給其他程式設計師朋友。

WPF帶佔位符的TextBox

效果圖如下 使用的xaml 如下 window x class placeholdertextbox.mainwindow xmlns xmlns x xmlns local clr namespace placeholdertextbox title mainwindow width 525 he...

WPF 限制Textbox輸入的內容

限制文字框textbox的輸入內容,在很多場景都有應用。舉個例子,現在文字框中,只能輸入0 1 2 3 4 5 6 7 8 9 這11個字元。限制輸入0 9很容易實現,關鍵是這個 符號。它在wpf中對應的是key.oempipe鍵。如果直接允許該鍵輸入,那麼會有 這個符號也可以輸入。那麼問題來了,怎...

WPF 禁用TextBox的觸控後自動彈出虛擬鍵盤

如下截圖,textbox,在觸控點選後,會自動彈出windows的虛擬鍵盤。如何,禁用鍵盤的自動彈出?通過呼叫taptip.exe或者osk.exe,主動彈出虛擬鍵盤 詳細呼叫可參考 c 呼叫windows虛擬鍵盤 textbox在觸控點選後,會自動彈出虛擬鍵盤,是因為在控制項中作了封裝。處理方案 ...