2010-10-14 3 views
2

У меня есть Windos::Forms::GroupBox, который содержит Windows::Forms::ListView. Когда я добавляю элементы, я добавляю элементы в ListView. Я говорю, чтобы изменить размер, но как я могу сделать то же самое для своего родителя? GroupBox?Как мне изменить размер Windows :: Forms :: GroupBox?

[править] Это мой пользовательский элемент управления список изменения размера:

ResizingListView::ResizingListView(void) 
{ 

} 

void ResizingListView::ResizeVerticallyToItems(void) 
{ 
    // Work out the height of the header 
    int headerHeight = 0; 
    int itemsHeight = 0; 
    if(this->Items->Count == 0) 
    { 
     // If no items exist, add one so we can work out how big the header is 
     Items->Add(""); 
     headerHeight = GetHeaderSize(); 
     this->Items->Clear(); 
     itemsHeight = 0; 
    } 
    else 
    { 
     headerHeight = GetHeaderSize(); 
     itemsHeight = this->Items->Count*this->Items[0]->Bounds.Height; 
    } 

    // Work out the overall height and resize to it 
    System::Drawing::Size sz = this->Size; 
    int borderSize = 0; 
    if(this->BorderStyle != System::Windows::Forms::BorderStyle::None) 
    { 
     borderSize = 2; 
    } 
    sz.Height = headerHeight+itemsHeight+borderSize; 
    this->Size = sz; 
} 

int ResizingListView::GetHeaderSize(void) 
{ 
    return Items[0]->Bounds.Top; 
} 

void ResizingListView::OnResize(System::EventArgs^ e) 
{ 
    if(this->Scrollable == false) 
    { 
     ResizeVerticallyToItems(); 
    } 
} 

Так что, когда я закончу aadding пункты я называю ResizeVerticallyToItems(), который изменяет размер управления без каких-либо проблем. У родителя GroupBox есть отступы, которые исчезают, когда мой список изменяет размер. Поэтому мои мысли состояли в том, что мне нужно было попросить родителя GroupBox изменить размер.

Это инициализация поле группы в:

this->grpMyStatus->AutoSize = true; 
this->grpMyStatus->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), 
    static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64))); 
this->grpMyStatus->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Stretch; 
this->grpMyStatus->Controls->Add(this->lstMyStatus); 
this->grpMyStatus->Dock = System::Windows::Forms::DockStyle::Top; 
this->grpMyStatus->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Bold, 
    System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0))); 
this->grpMyStatus->ForeColor = System::Drawing::Color::SkyBlue; 
this->grpMyStatus->Location = System::Drawing::Point(3, 166); 
this->grpMyStatus->Name = L"grpMyStatus"; 
this->grpMyStatus->Padding = System::Windows::Forms::Padding(3, 3, 3, 20); 
this->grpMyStatus->Size = System::Drawing::Size(270, 92); 
this->grpMyStatus->TabIndex = 5; 
this->grpMyStatus->TabStop = false; 
this->grpMyStatus->Text = L"My Status"; 

... и это инициализация в списке дочернего:

this->lstMyStatus->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), 
    static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64))); 
this->lstMyStatus->BorderStyle = System::Windows::Forms::BorderStyle::None; 
this->lstMyStatus->Columns->AddRange(gcnew cli::array<System::Windows::Forms::ColumnHeader^>(1) {this->columnHeader6}); 
this->lstMyStatus->Dock = System::Windows::Forms::DockStyle::Top; 
this->lstMyStatus->Font = (gcnew System::Drawing::Font(L"Verdana", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, 
    static_cast<System::Byte>(0))); 
this->lstMyStatus->ForeColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(224)), 
    static_cast<System::Int32>(static_cast<System::Byte>(224)), static_cast<System::Int32>(static_cast<System::Byte>(224))); 
this->lstMyStatus->HeaderStyle = System::Windows::Forms::ColumnHeaderStyle::None; 
this->lstMyStatus->HideSelection = false; 
this->lstMyStatus->Items->AddRange(gcnew cli::array<System::Windows::Forms::ListViewItem^>(3) {listViewItem3, 
    listViewItem4, listViewItem21}); 
this->lstMyStatus->LabelWrap = false; 
this->lstMyStatus->Location = System::Drawing::Point(3, 18); 
this->lstMyStatus->Name = L"lstMyStatus"; 
this->lstMyStatus->RightToLeft = System::Windows::Forms::RightToLeft::Yes; 
this->lstMyStatus->RightToLeftLayout = true; 
this->lstMyStatus->Scrollable = false; 
this->lstMyStatus->ShowGroups = false; 
this->lstMyStatus->ShowItemToolTips = true; 
this->lstMyStatus->Size = System::Drawing::Size(264, 54); 
this->lstMyStatus->SmallImageList = this->imgLights; 
this->lstMyStatus->TabIndex = 18; 
this->lstMyStatus->UseCompatibleStateImageBehavior = false; 
this->lstMyStatus->View = System::Windows::Forms::View::Details; 
this->lstMyStatus->SelectedIndexChanged += gcnew System::EventHandler(this, &Status::lstMyStatus_SelectedIndexChanged); 
+1

Не могли бы вы разместить образец кода? Какие стратегии изменения размеров имеют компоненты (GrowAndShrink и т. Д.), Каков макет, как вы скажете, чтобы изменить размер? Вы называете PerformLayout()? – Stefan

+0

PerformLayout (в групповом поле) получил его :) Если вы добавите это как ответ, я соглашусь с ним. –

ответ

1

Автоматически, когда вы устанавливаете свойство AutoSize для GroupBox равным True, оно будет увеличиваться по мере необходимости, чтобы соответствовать ListView. Это не очень часто встречается в большинстве типичных макетов, поскольку это может привести к перекрытию какого-либо другого элемента управления или увеличению за пределами краев формы.

+0

У нас есть информация о статусе, возвращаемая с какого-либо оборудования, и в зависимости от того, какие дополнительные устройства подключены, будет доступно больше или меньше информации. Следовательно, необходимо изменить размер. –

+0

Ну, не стоит недооценивать полосу прокрутки :) Но мне кажется, что вам также нужно будет сделать автоматическую калибровку формы. –

2

Установите AutoSize в true для GroupBox

Удачи.

+0

Я уже сделал это –

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