none
更新TextBox.Text屬性,會讓捲軸重置的問題 RRS feed

  • 問題

  •  

    我使用TextBox物件,並且將其屬性設定為多行、雙捲軸樣式。

    我的介面上有個按鈕,按下這按鈕後,會對TextBox目前游標的位置,插入一段字串。

    目前遇到一個問題,因為我使用textBox1.Text = textBox1.Text + "AAA"; 之類的寫法,

    會造成TextBox的捲軸重置,跳回最前行。有什麼辦法可以解決這現象嗎?

    目前知道可以使用AppendText() 方法,不會造成捲軸重置,但是這只能將字串加在最末端。

     

    2007年8月30日 上午 05:45

解答

  •  

    最後我找到解決的方案了,就是改用RichTextBox來取代TextBox,該物件更新Text屬性時,

    不會讓ScrollBar重置,但會讓游標回到最前面的字元。但這可以利用SelectionStar處理掉。

     

    2007年8月31日 上午 10:19

所有回覆

  • HI,

     

    您可以將TextBox的SelectionStart設定成剛剛加入的文字的後面, 捲軸就不會Reset了

     

    tihs

    2007年8月30日 上午 08:17
  •  tihs 寫信:

    HI,

     

    您可以將TextBox的SelectionStart設定成剛剛加入的文字的後面, 捲軸就不會Reset了

     

    tihs

     

    這樣仍然還是會重置,我研究了一下,只要設定Text屬性,就會造成TextBox的ScrollBar重置的現象。

    如:

    textBox1.Text = textBox1.Text.Insert(textBox1.SelectionStar, "TEST");

    執行這行後,TextBox的ScrollBar就重置了,因此TextBox顯示的區域也回到第一行,可是user可能原本是

    在編輯第100、200行,TextBox將畫面帶回第一行,造成困擾> <。插入後再將SelectionStart指定回來100行

    也沒用。

     

    2007年8月30日 上午 09:39
  • 光設定 SelecttionStart 沒有用阿...你還要捲動咩...

     

    Code Snippet

            private void button5_Click(object sender, EventArgs e)
            {
                int temp = textBox1.SelectionStart;
                textBox1.Text = textBox1.Text.Insert(textBox1.SelectionStart, "TEST");
                textBox1.SelectionStart = temp;
                textBox1.ScrollToCaret();
            }

     

     

    textBox1.ScrollToCaret();  試試看

     

    2007年8月30日 上午 09:52
  • 應該要用javascript搞定吧,就像FCKeditor一樣。

     

    2007年8月30日 上午 10:03
  •  

    使用ScrollToCaret() 確實是可以捲動到目前游標的位置,但是我的畫面上會有短暫的閃爍現象。

    應該是scroll重置,然後又馬上移動至目的位置,所造成的現象。

    這個現象有方法可以避免掉嗎?

    2007年8月31日 上午 05:44
  •  

    最後我找到解決的方案了,就是改用RichTextBox來取代TextBox,該物件更新Text屬性時,

    不會讓ScrollBar重置,但會讓游標回到最前面的字元。但這可以利用SelectionStar處理掉。

     

    2007年8月31日 上午 10:19