.net - 如何要求 Windows::Forms::GroupBox 调整大小?

标签 .net winforms c++-cli resize

我有一个Windos::Forms::GroupBox,其中包含一个Windows::Forms::ListView。当我添加项目时,我将项目添加到 ListView 我告诉它调整大小,但如何对其父 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();
    }
}

因此,当我完成添加项目时,我调用 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);

最佳答案

将 GroupBox 的 AutoSize 设置为 true

祝你好运。

关于.net - 如何要求 Windows::Forms::GroupBox 调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3933727/

相关文章:

c# - 为什么枚举会这样?

.net - ASP.net 成员资格 - 添加角色

mysql - 错误 System.ArgumentException 不支持关键字。 C++

c# - C++/CLI 无法识别命名空间

.net - WPF应用程序由于System.IO.FileFormatException()而无法启动

c# - .NET 堆填满了字符串对象 -> OutOfMemoryException

c# - 在子窗体中单击按钮时如何刷新父窗体?

c# - 如何在 WinForm 上保存搜索

c# - 如何在 WinForms 的 ComboBox 中居中对齐所选项目?

c++-cli - 从 JSON 文件 c/cli 获取字符串