Solved

Scrolling a control?

Posted on 2004-04-05
13
1,714 Views
Last Modified: 2007-12-19
How do I change the scrolled location on a control? Basicly, I want to scroll to the bottom of the document when an event occurs.

Thank you for your time,
Arrummzen
0
Comment
Question by:Arrummzen
  • 8
  • 3
  • 2
13 Comments
 
LVL 48

Expert Comment

by:AlexFM
Comment Utility
What control?
0
 
LVL 1

Author Comment

by:Arrummzen
Comment Utility
AxSHDocVw.AxWebBrowser

Its a HTML rendering control.

Thank you for your time,
Arrummzen
0
 
LVL 1

Author Comment

by:Arrummzen
Comment Utility
I am setting the HTML in the control myself. Is there a way I could write the HTML doc so the browser jumps to the bottom? (How would I make a web site the jumps the the bottom when loaded?). That would probly solve the problem.

Thank you for your time,
Arrummzen
0
 
LVL 48

Expert Comment

by:AlexFM
Comment Utility
Try this (just a guess):

        [DllImport("user32.dll")]
        static extern int PostMessage(
            IntPtr wnd,
            uint Msg,
            IntPtr wParam,
            IntPtr lParam);

        const uint WM_VSCROLL = 0x0115;
        const uint SB_BOTTOM = 7;


To scroll control tp the end:

PostMessage(control.Handle, WM_VSCROLL, (IntPtr)SB_BOTTOM, (IntPtr)IntPtr.Zero);
0
 
LVL 1

Author Comment

by:Arrummzen
Comment Utility
[DllImport] gives me -
The type or namespace name 'DllImport' could not be found (are you missing a using directive or an assembly reference?)

How do I fix that?

Thank you for yor time,
Arrummzen
0
 
LVL 1

Author Comment

by:Arrummzen
Comment Utility
I just needed to add -
using System.Runtime.InteropServices;
Thank you for your time,
Arrummzen
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 1

Author Comment

by:Arrummzen
Comment Utility
It didn't work.

Any other ideas?

Thank you for your time,
Arrummzen
0
 
LVL 1

Author Comment

by:Arrummzen
Comment Utility
How can I determine the size at which the control would have no scroll bars? Some how query it to determine its logical size?

Thank you for your time,
Arrummzen
0
 
LVL 48

Expert Comment

by:AlexFM
Comment Utility
Sorry, this is all I have for now.
0
 
LVL 4

Expert Comment

by:caner_elci
Comment Utility
Well, if it's that hopeless, what about trying SendInput() API? Send an End key to it. It may work...

Caner
0
 
LVL 1

Author Comment

by:Arrummzen
Comment Utility
I actualy came up with my own method. I inserted a JavaScript into the document, that used the Scrollto method, to scroll to the bottom.

Thank you for your time,
Arrummzen
0
 
LVL 1

Author Comment

by:Arrummzen
Comment Utility
caner_elci: Although my solution works, if you post working code that proves your solution works as well. I will accept your comment as an answer, else I will ask to have this question closed soon.

Thank you for your time,
Arummzen
0
 
LVL 4

Accepted Solution

by:
caner_elci earned 500 total points
Comment Utility
Here is the working sample code:

            public const int INPUT_KEYBOARD = 1;
            public const int KEYEVENTF_KEYUP = 0x0002;

            public struct KEYDBINPUT
            {
                  public Int16 wVk;
                  public Int16 wScan;
                  public Int32 dwFlags;
                  public Int32 time;
                  public Int32 dwExtraInfo;
                  public Int32 __filler1;
                  public Int32 __filler2;
            }

            public struct INPUT
            {
                  public Int32 type;
                  public KEYDBINPUT ki;
            }

            [DllImport("user32")] public static extern int SendInput( int cInputs, ref INPUT pInputs, int cbSize );

            public void HoldKey( Keys vk )
            {
                  INPUT input = new INPUT();
                  input.type = INPUT_KEYBOARD;
                  input.ki.dwFlags = 0;
                  input.ki.wVk = (Int16)vk;
                  SendInput( 1, ref input, Marshal.SizeOf( input ) );
            }

            public void ReleaseKey( Keys vk )
            {
                  INPUT input = new INPUT();
                  input.type = INPUT_KEYBOARD;
                  input.ki.dwFlags = KEYEVENTF_KEYUP;
                  input.ki.wVk = (Int16)vk;
                  SendInput( 1, ref input, Marshal.SizeOf( input ) );
            }

            public void PressKey( Keys vk )
            {
                  HoldKey( vk );
                  ReleaseKey( vk );
            }

            private void button2_Click(object sender, System.EventArgs e)
            {
                  richTextBox1.Focus();
                  HoldKey( Keys.RControlKey );
                  PressKey( Keys.End );
                  ReleaseKey( Keys.RControlKey );
            }

When button2 is pressed, it focuses richTextBox1 control in my form, and holds the Ctrl key, presses End key and then releases Ctrl key.. Ctrl+End is a better hotkey then just End key.. works for almost all viewer/editors..
By the way, if you want to do this for an external application, just set it as a foreground window, activate it and send the same keys..

Caner ELCI
0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Extention Methods in C# 3.0 by Ivo Stoykov C# 3.0 offers extension methods. They allow extending existing classes without changing the class's source code or relying on inheritance. These are static methods invoked as instance method. This…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now