У меня есть панель (Windows Forms), и я хочу отключить горизонтальную полосу прокрутки панелей. Я пробовал это:
HorizontalScroll.Enabled = false;
Но это не сработает.
Как я могу это сделать?
У меня есть панель (Windows Forms), и я хочу отключить горизонтальную полосу прокрутки панелей. Я пробовал это:
HorizontalScroll.Enabled = false;
Но это не сработает.
Как я могу это сделать?
Попробуйте реализовать этот способ, он будет работать на 100%
panel.HorizontalScroll.Maximum = 0;
panel.AutoScroll = false;
panel.VerticalScroll.Visible = false;
panel.AutoScroll = true;
Если вы чувствуете, что оскверняете свой код, вы можете попробовать это очень "хакерское" решение:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool ShowScrollBar(IntPtr hWnd, int wBar, bool bShow);
private enum ScrollBarDirection
{
SB_HORZ = 0,
SB_VERT = 1,
SB_CTL = 2,
SB_BOTH = 3
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
ShowScrollBar(panel1.Handle, (int)ScrollBarDirection.SB_BOTH, false);
base.WndProc(ref m);
}
В настоящее время я использую приведенный выше код, чтобы предотвратить показ его полос прокрутки сторонним UserControl. Они не подвергались каким-либо правильным способам их сокрытия.
Я думаю, что у вас такая проблема, потому что для свойства AutoScroll вашей панели установлено значение true. Я сделал тестовое решение (.NET 3.5) и обнаружил следующее:
Если вы попробуете это:
panel.AutoScroll = true;
panel.HorizontalScroll.Enabled = false;
panel.HorizontalScroll.Visible = false;
HorizontalScroll.Enabled и .Visible не изменяются на false (при условии, что на панели есть элементы управления внутри этой причины, поскольку автоскар для отображения горизонтальной полосы прокрутки). Кажется, что вы должны отключить AutoScroll, чтобы иметь возможность изменять эти свойства вручную.
У меня был такой же тип проблемы, когда горизонтальная прокрутка появлялась, когда AutoScroll = true, она появилась только при появлении вертикальной полосы прокрутки. Я, наконец, понял, что я удалил прокладку с панели и добавив 20 обратно в правое заполнение, что позволило отобразить вертикальную полосу прокрутки и не показывать горизонтальную.
Управляемый код на С++, чтобы скрыть панель HScroll:
// Hide horizontal scroll bar
HWND h = static_cast<HWND> (this->Handle.ToPointer());
ShowScrollBar(h, SB_HORZ, false);
Другим решением, которое, казалось, было единственным, с которым я мог работать, было довольно хакерское:
foreach (UserControl control in ListPanel.Controls)
{
if (ListPanel.VerticalScroll.Visible)
control.Width = ListPanel.Width - 23;
else
control.Width = ListPanel.Width-5;
}
который я вызываю в своем событии OnResize
Я искал ответ на вопрос, как добавить панель прокрутки в поле, когда это необходимо, и удалить ее, когда это не нужно. Это решение, которое я разработал для текстового поля с максимально допустимой шириной и высотой, измененный для отображаемого текста.
private void txtOutput_TextChanged(object sender, EventArgs e)
{
// Set the scrollbars to none. If the content fits within textbox maximum size no scrollbars are needed.
txtOutput.ScrollBars = ScrollBars.None;
// Calculate the width and height the text will need to fit inside the box
Size size = TextRenderer.MeasureText(txtOutput.Text, txtOutput.Font);
// Size the box accordingly (adding a bit of extra margin cause i like it that way)
txtOutput.Width = size.Width + 20;
txtOutput.Height = size.Height + 30;
// If the box would need to be larger than maximum size we need scrollbars
// If height needed exceeds maximum add vertical scrollbar
if (size.Height > txtOutput.MaximumSize.Height)
{
txtOutput.ScrollBars = ScrollBars.Vertical;
// If it also exceeds maximum width add both scrollbars
// (You can't add vertical first and then horizontal if you wan't both. You would end up with just the horizontal)
if (size.Width > txtOutput.MaximumSize.Width)
{
txtOutput.ScrollBars = ScrollBars.Both;
}
}
// If width needed exceeds maximum add horosontal scrollbar
else if (size.Width > txtOutput.MaximumSize.Width)
{
txtOutput.ScrollBars = ScrollBars.Horizontal;
}
}