قبل از خواندن این مقاله، خواندن قسمت های قبلی مجموعه را به شدت توصیه می کنم.
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (کنترل دکمه)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (Stackpanel)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (CheckBox)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (رادیو دکمه)
در این مقاله قصد داریم با کنترل Combobox در مدرن C++ آشنا شویم.
کنترل Combobox شامل مجموعه ای از موارد است. این نشان دهنده لیست کشویی موارد است و کاربر می تواند موارد را از لیست انتخاب کند. هنگامی که Combobox باز است، تمام موارد را نمایش می دهد. پس از انتخاب یک مورد، لیست کشویی به طور خودکار بسته می شود.
در این مقاله به برخی از خواص مهم کمبوباکس پرداخته ام.
ویژگی مورد
ویژگی Item (container) برای افزودن داده ها به جعبه ترکیبی، هر آیتمی که در این لیست اضافه شده است، استفاده می شود. برای کاربر نمایش داده خواهد شد. هر آیتم در Combobox به عنوان ComboBoxItem ذخیره می شود.
- cbBox.Items().Append(MakeString(L"Windows 7"));
- cbBox.Items().Append(MakeString(L"Windows 8"));
- cbBox.Items().Append(MakeString(L"Windows 10"));
- cbBox.Items().Append(MakeString(L"Windows Mobile 10"));
SelectedIndex
SelectedIndex: SelectedIndex حاوی موقعیت فهرست انتخاب شده است. موارد ذخیره شده در جعبه ترکیبی مبتنی بر شاخص صفر هستند. اگر هیچ موردی انتخاب نشده باشد، SelectIndex مقدار "-1" را به آن اختصاص می دهد.
SelectionChanged: رویداد SelectionChanged زمانی فعال می شود که مورد از Combobox تغییر کند.
- cbBox.SelectedIndex(0);
کد نمونه رویداد SelectionChanged
- cbBox.SelectionChanged({ this,&App::CbSelectionChanged});
- void CbSelectionChanged(IInspectable const & sender,const RoutedEventArgs &args)
- {
- ComboBox cbbox = sender.as<ComboBox>();
- auto itemSelect = cbbox.SelectedItem().as<IPropertyValue>();
- auto selectItem = itemSelect.GetString();
- }
SelectedItem حاوی اطلاعات کامل آیتم (ComboBoxItem) است. هر زمان که رویداد selectionchanged فعال شود، SelectedItem به طور خودکار بر اساس انتخاب کاربر تغییر می کند.
همانطور که در بالا در کد نمونه SelectedItem( ) مشاهده کردید، من از یک عملگر برای تبدیل ComboBoxItem به IPPropertyValue استفاده کرده ام تا مقدار رشته را از آیتم Combobox دریافت کنم.
رویداد DropDownOpened & DropDownClosed با باز و بسته شدن Combobox فعال می شود.
- void CbSelectionOpend(IInspectable const & sender, const IInspectable &args)
- {
- sPanel.Background(SolidColorBrush(Colors::Yellow()));
- }
- void CbSelectionClosed(IInspectable const & sender, const IInspectable &args)
- {
- sPanel.Background(SolidColorBrush(Colors::White()));
- }
بیایید یک مثال از نحوه افزودن موارد در Combobox و نمایش متن مورد انتخاب شده در جعبه متن را ببینیم.
- #include "pch.h"
- using namespace winrt;
- using namespace Windows::ApplicationModel;
- using namespace Windows::ApplicationModel::Activation;
- using namespace Windows::Foundation;
- using namespace Windows::UI;
- using namespace Windows::UI::Xaml;
- using namespace Windows::UI::Xaml::Controls;
- using namespace Windows::UI::Xaml::Controls::Primitives;
- using namespace Windows::UI::Xaml::Interop;
- using namespace Windows::UI::Xaml::Media;
- using namespace Windows::UI::Xaml::Navigation;
- using namespace Windows::UI::Popups;
- using namespace Windows::Storage;
- struct App :ApplicationT<App>
- {
- public:
- virtual ~App() = default;
- ComboBox cbBox;
- TextBlock txtStatus;
- StackPanel sPanel;
- IInspectable MakeString(hstring captionText)
- {
- return PropertyValue::CreateString(captionText);
- }
- Thickness CreateThickness(int top,int bottom,int left,int right)
- {
- Thickness margin;
- margin.Bottom = bottom;
- margin.Left = left;
- margin.Right = right;
- margin.Top = top;
- return margin;
- }
- void CbSelectionChanged(IInspectable const & sender,const RoutedEventArgs &args)
- {
- ComboBox cbbox = sender.as<ComboBox>();
- auto itemSelect = cbbox.SelectedItem().as<IPropertyValue>();
- auto selectItem = itemSelect.GetString();
- txtStatus.Text(selectItem);
- }
- void CbSelectionOpend(IInspectable const & sender, const IInspectable &args)
- {
- sPanel.Background(SolidColorBrush(Colors::Yellow()));
- }
- void CbSelectionClosed(IInspectable const & sender, const IInspectable &args)
- {
- sPanel.Background(SolidColorBrush(Colors::White()));
- }
- void OnLaunched(LaunchActivatedEventArgs const&)
- {
- cbBox.Items().Append(MakeString(L"Windows 7"));
- cbBox.Items().Append(MakeString(L"Windows 8"));
- cbBox.Items().Append(MakeString(L"Windows 10"));
- cbBox.Items().Append(MakeString(L"Windows Mobile 10"));
- cbBox.Items().Append(MakeString(L"Linux"));
- cbBox.Items().Append(MakeString(L"MacOS"));
- cbBox.Margin(CreateThickness(10, 10, 10, 10));
- cbBox.SelectionChanged({ this,&App::CbSelectionChanged});
- cbBox.SelectedIndex(0);
- cbBox.DropDownOpened({ this,&App::CbSelectionOpend });
- cbBox.DropDownClosed({ this,&App::CbSelectionClosed });
- TextBlock txtBlock;
- txtBlock.Text(L"Select the OS :");
- txtBlock.Margin(CreateThickness(10, 10, 10, 0));
- txtStatus.Margin(CreateThickness(10, 10, 10, 10));
- sPanel.Margin(CreateThickness(10,10,10,10));
- sPanel.Orientation(Orientation::Horizontal);
- sPanel.Children().Append(txtBlock);
- sPanel.Children().Append(cbBox);
- sPanel.Children().Append(txtStatus);
- auto window = Window::Current();
- window.Content(sPanel);
- window.Activate();
- }
- };
- int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
- {
- Application::Start([](auto &&) {make<App>(); });
- return 0;
- }
نتیجه
امیدوارم نحوه استفاده از کنترل Combobox را متوجه شده باشید.