2013-10-14 3 views
0

После этого: Prevent AutoScroll when contained Control gets focus Я нашел способ иметь полосу прокрутки без AutoScroll (используя производный класс, который может получить доступ к свойству VScroll). Однако - это не в режиме реального времени. то есть только тогда, когда пользователь выполняет прокрутку, элемент управления фактически прокручивается. (в отличие от панели с AutoScroll = true.) Итак, как я могу ее прокрутить в режиме реального времени?Получить прокрутку в реальном времени без AutoScroll

Мой код:

using System.Drawing; 
using System.Windows.Forms; 

namespace test 
{ 
    public partial class Form1 : Form 
    { 
     MyPanel panel = new MyPanel 
     { 
      //AutoScroll = true, 
      Size = new Size(200, 200), 
      Location = new Point(0, 30), 
      BackColor = Color.Green 
     }; 
     Button b1 = new Button 
     { 
      Location = new Point(100, 100), 
      Size = new Size(50, 150), 
      BackColor = Color.Black 
     }; 
     Button b2 = new Button(); 

     public Form1() 
     { 
      InitializeComponent(); 
      panel.Controls.Add(b1); 
      Controls.Add(panel); 
      Controls.Add(b2); 
      Shown += new System.EventHandler(Form1_Shown); 
     } 

     void Form1_Shown(object sender, System.EventArgs e) 
     { 
      panel.VerticalScroll.Visible = true; 
      panel.SetV(); 
     } 
    } 

    class MyPanel : Panel 
    { 
     public void SetV() { VScroll = true; } 
    } 
} 
+0

Вам необходимо переопределить метод OnScroll() панели и вызвать SetDisplayRectLocation (0, -se.NewValue). Это освобождает гарантию. –

+0

@ HansPassant Еще раз спасибо. Прекрасно работает. Вы можете преобразовать это в ответ. Он заслуживает репутации. – ispiro

+0

@HansPassant 'Это освобождает гарантию. '- Вы имеете в виду, что есть проблемы с этим? – ispiro

ответ

0

Как в комментарии:

Вам необходимо переопределить метод на панели в OnScroll() и вызвать SetDisplayRectLocation (0, -se.NewValue).

Это ответ на этот вопрос.

Однако я обнаружил, что у меня не может быть обеих полос прокрутки одновременно. Или, по крайней мере, я не нашел способ сделать это.

Смежные вопросы