Avatar billede fanatic Nybegynder
18. april 2005 - 15:27 Der er 6 kommentarer og
1 løsning

richTextBox / Scrollbar skal vise bunden først

Hej Eksperter!

Jeg laver et program som benytter et richTextBox. Når der skrives for meget tekst til at det kan være i boksen kommer en scrollbar automatisk til syne.

Problemet er at textboksen automatisk viser det øverste tekst. Det skal den ikke! Den skal selv "scrolle" ned til den nederste linie, da det er det sidste som brugeren har tastet ind.

Kender i en løsning?
Avatar billede driis Nybegynder
18. april 2005 - 15:44 #1
rtb.SelectionStart = rtb.Text.Length;
rtb.ScrollToCaret();
Avatar billede fanatic Nybegynder
18. april 2005 - 15:50 #2
>driis

Jeg har lige prøvet at skrive det som du foreslog.
Det har desværre ingen effekt?? :-(
Avatar billede fanatic Nybegynder
18. april 2005 - 15:54 #3
Okay jeg har løst den.

Man skal huske at sætte .Focus før Caret og fjerne den efter.
Avatar billede intel4004 Novice
18. april 2005 - 15:58 #4
Du skal huske at sætte focus før brug af ScrollToCaret metoden - og derefter focus igen. Så virker det...

Mvh Intel4004
Avatar billede fanatic Nybegynder
18. april 2005 - 15:59 #5
>intel4004
hmmmm....ja det kan du have ret i ;-) Tak for hjælpen!!
Avatar billede lanka Nybegynder
18. april 2005 - 16:35 #6
ja det er rigtigt..
Avatar billede lifo Nybegynder
18. april 2005 - 22:54 #7
det med focus kan være et problem i nogle tilfælde
jeg faldt over denne løsning et eller andet sted og bruger den selv uden at tænke for meget på det  og den funker fint

kalder bare scrollToBottom
dog skal navnet på din ritchtextbox rættes til

const int SB_VERT = 1;
const int EM_SETSCROLLPOS = 0x0400 + 222;

        [DllImport("user32", CharSet=CharSet.Auto)]
        public static extern bool GetScrollRange(IntPtr hWnd, int nBar, out int lpMinPos, out int lpMaxPos);

        [DllImport("user32", CharSet=CharSet.Auto)]
        public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, POINT lParam);


        [StructLayout(LayoutKind.Sequential)]
            public class POINT
        {
            public int x;
            public int y;
            public POINT()
            {
            }
            public POINT(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
        }
        private void scrollToBottom()
        {
            int min, max;
            GetScrollRange(rtbxChat.Handle, SB_VERT, out min, out max);
            SendMessage(rtbxChat.Handle, EM_SETSCROLLPOS, 0, new POINT(0, max - rtbxChat.Height));
        }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester