Если вам нужно добавить панель внутри вашего GroupBox, закрепите панель внутри GroupBox и установите для свойства AutoScroll на закрепленной панели значение true.Затем вы можете поместить любые элементы управления, которые вам нужны, внутри GroupBox на Panel, которая будет прокручиваться при необходимости.
Если вам не нравится способ, который выглядит так, как вы заявили выше, у вас есть два возможных варианта:
Может быть способ взломать (в этом случае больше похоже на «злоупотребление») элемент управления GroupBox, сделав вызовы в собственном Win32 API для добавления полосы прокрутки.Я редко использую собственные вызовы на управляемых элементах управления, но я делал это в ситуациях, когда, например, мне нужно отключить полосу прокрутки в ListView, поскольку ListView не предоставляет это свойство.Ниже я раскрываю встроенную функцию Win32 для использования в C #, просто вызовите SetScrollBarVisible, чтобы включить или отключить полосу прокрутки по мере необходимости из вашего кода (я не проверял это на GroupBox):
ЕслиЭстетика ЭТО очень важно для вас (неплохо, пользовательский опыт во многих областях мира разработки приложений сильно недооценивается), и добавление полосы прокрутки в GroupBox не работает / не выглядит хорошо для вас, вам нужно найти другуюрешение.Я полагаю, что лучшим решением было бы создать собственный контроль с нуля, который соответствует вашим ожиданиям (или изменить саму полосу прокрутки, не зная, как это сделать), хотя это может потребовать гораздо больше работы, чем может стоить.
Вот как я выставляю и вызываю Win32-функцию SetScrollBar из моего кода C # (извините, DllImport по какой-то причине не будет форматироваться как блок кода):
[DllImport ("user32")] приватный статический extern long ShowScrollBar (long hwnd, long wBar, long bShow);
long SB_HORZ = 0;
long SB_VERT = 1;
long SB_BOTH = 3;
private static void SetScrollBarVisible (Control control, long sb, bool enable)
{
if (control != null) return;
if (enable)
ShowScrollBar(control.Handle.ToInt64(), sb, 1);
else
ShowScrollBar(control.Handle.ToInt64(), sb, 0);
}