如何在组合框和COMBOBOXchange事件中列出所有可用的VCL样式,在C++ Builder中应用该样式?

如何在组合框和COMBOBOXchange事件中列出所有可用的VCL样式,在C++ Builder中应用该样式?,c++,c++builder,vcl,vcl-styles,C++,C++builder,Vcl,Vcl Styles,我目前正在尝试在我的应用程序中添加一个功能,用户可以在其中选择VCL样式作为首选项。我可以直接手动将所有样式添加到组合框中,但我相信有一种更简单的方法 创建一个新的C++Builder VCL应用程序。在项目|选项|应用程序|外观菜单中选择一些自定义样式名称 然后将按钮和组合框组件添加到C++ VCL窗体中。对于按钮的onlick和ComboBox的Change事件,请使用以下代码。您还需要将include放在表单:D的源代码顶部附近 编译并运行,单击该按钮以查看组合框,其中填充了您在“项目”外

我目前正在尝试在我的应用程序中添加一个功能,用户可以在其中选择VCL样式作为首选项。我可以直接手动将所有样式添加到组合框中,但我相信有一种更简单的方法

创建一个新的C++Builder VCL应用程序。在项目|选项|应用程序|外观菜单中选择一些自定义样式名称

然后将按钮和组合框组件添加到C++ VCL窗体中。对于按钮的onlick和ComboBox的Change事件,请使用以下代码。您还需要将include放在表单:D的源代码顶部附近 编译并运行,单击该按钮以查看组合框,其中填充了您在“项目”外观选项中选择的样式。然后从组合框中选择一种样式以更改应用程序的样式

我已经用RAD Studio 10.4 Sydney测试了这段代码。适用于任何最新版本的C++Builder

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ComboBox1->Items->BeginUpdate();
    try
    {
        ComboBox1->Items->Clear();

        DynamicArray<String> styleNames = Vcl::Themes::TStyleManager::StyleNames;

        for(int i = 0; i < styleNames.Length; ++i)
        {
            String styleName = styleNames[i];
            ComboBox1->Items->Add(styleName);
        }
    }
    __finally
    {
        ComboBox1->Items->EndUpdate();
    }
}

void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
    // set the style for the selected combobox item
    Vcl::Themes::TStyleManager::TrySetStyle(ComboBox1->Items->Strings[ComboBox1->ItemIndex],false);
}

这只回答了OP的一半问题。这显示了如何检索样式并将其放入组合框中,而不是如何在用户每次选择组合框中的项目时应用选定的样式。这将涉及调用TComboBox::OnSelect事件。我将使用OnSelect事件处理程序更新代码。很抱歉,没有看到或重新阅读问题以获取请求的第二部分。我更新了上面的答案,以包含ComboBox OnChange事件处理程序代码-谢谢Remy