У меня есть 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);
Не могли бы вы разместить образец кода? Какие стратегии изменения размеров имеют компоненты (GrowAndShrink и т. Д.), Каков макет, как вы скажете, чтобы изменить размер? Вы называете PerformLayout()? – Stefan
PerformLayout (в групповом поле) получил его :) Если вы добавите это как ответ, я соглашусь с ним. –