После этого: 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; }
}
}
Вам необходимо переопределить метод OnScroll() панели и вызвать SetDisplayRectLocation (0, -se.NewValue). Это освобождает гарантию. –
@ HansPassant Еще раз спасибо. Прекрасно работает. Вы можете преобразовать это в ответ. Он заслуживает репутации. – ispiro
@HansPassant 'Это освобождает гарантию. '- Вы имеете в виду, что есть проблемы с этим? – ispiro