Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2-semestr / 14-ameliy_jif
.pdf
14-ámeliy jumıs. Paydalanıwshı interfeysin proektlestiriw. GUI
ortalıǵında dialog aynaların bir-biri menen baylanıstırıw.
Jumıstıń maqseti: C++ (Windows Forms) tilinde kóp formalıq (Multi-
Form) qosımshalar jaratıwdı úyreniw. Jańa formalar (`Form`) qosıw, olardı
kórsetiw (`Show` hám `ShowDialog` metodları), formalar arasında maǵlıwmat
almasıw (konstruktorlar hám public aǵzalar arqalı) hám `DialogResult`
mexanizminen paydalanıw kónlikpelerin qáliplestiriw. Modallı (Modal) hám
modelsiz (Modeless) dialog aynalarınıń ayırmashılıǵın túsiniw hám ámeliyatta
qollanıw.
Teoriyalıq bólim:
Zamanagóy programmalar ádette tek bir ǵana ayna menen sheklenbeydi.
Olar "Bas ayna" (Main Form), "Sazlawlar", "Haqqında", "Login" hám basqa
kómekshi aynalardan turadı. Windows Forms-ta hárbir ayna – bul
`System::Windows::Forms::Form` klasınan miyras alǵan bólek klass.
Jańa forma qosıw:
Project -> Add New Item -> Windows Form tańlaw arqalı jańa forma
(mısalı, `MyDialog.h`) qosıladı. Bul forma proektke klass retinde qosıladı.
Formalardı shaqırıw:
Basqa formanı shaqırıw ushın dáslep onıń bas faylın (`#include
"MyDialog.h"`) qosıw kerek. Keyin onıń obyektin jaratıp, kórsetiw kerek.
Eki túrli kórsetiw usılı bar:
1. `Show()`: Modelsiz (Modeless) rejim. Jańa ayna ashıladı, biraq
paydalanıwshı eski ayna menen de islese beredi. Bul usıl kóbinese
"Instrumentler paneli" yamasa "Kómekshi aynalar" ushın qollanıladı.
2. `ShowDialog()`: Modallı (Modal) rejim. Jańa ayna ashılǵanda, eski
ayna "bloklanadı". Paydalanıwshı jańa aynanı jappaǵansha, eski aynaǵa óte
almaydı. Bul usıl "Login", "Sazlawlar", "Sorawlar" (MessageBox sıyaqlı) ushın
qollanıladı. Kod `ShowDialog()` qatarında toqtap turadı hám ayna jabılǵannan
keyin dawam etedi.
Maǵlıwmat almasıw:
Formalar bir-biri menen baylanısıwı kerek.
Maǵlıwmat jiberiw (Bas -> Ekinshi): Ekinshi formada `public`
ózgeriwshi yamasa parametrli konstruktor jaratıp, obyekt jaratılǵan
waqıtta maǵlıwmattı beriw kerek.

Maǵlıwmat alıw (Ekinshi -> Bas): Ekinshi ayna jabılǵannan keyin
(`ShowDialog` tawsılǵannan keyin), onıń `public` ózgeriwshilerin
oqıwǵa boladı. Sonday-aq, `DialogResult` qásiyeti arqalı
paydalanıwshınıń "OK" yamasa "Cancel" basqanın biliwge boladı.
ÁMELIY BÓLIM:
"Paydalanıwshı Anketası" sistemasın jaratamız.
1-mısal: Ekinshi formanı ashıw
Bas formada `buttonOpen` túymesi bar.
Kod:
#include "MyForm2.h" // Ekinshi forma
private: System::Void buttonOpen_Click(...) {
MyForm2^ form2 = gcnew MyForm2();
form2->ShowDialog(); // Modal rejimde ashıw
}
2-mısal: Maǵlıwmat jiberiw (Konstruktor arqalı)
Bas formada atı (`textBoxName`) bar, onı ekinshi formaǵa jiberemiz.
Kod (MyForm2.h):
public:
String^ userName; // Qabıllawshı
// Konstruktordı ózgertemiz
MyForm2(String^ name) {
InitializeComponent();
userName = name;
labelWelcome->Text = "Sálem, " + name;
}

Kod (MyForm1.h):
String^ name = textBoxName->Text;
MyForm2^ form2 = gcnew MyForm2(name); // Jiberiw
form2->ShowDialog();
3-mısal: Maǵlıwmat alıw (DialogResult)
Ekinshi formada "Jas" (`textBoxAge`) hám "OK", "Cancel" túymeleri bar.
Kod (MyForm2.h):
public: String^ userAge;
private: System::Void btnOK_Click(...) {
userAge = textBoxAge->Text; // Maǵlıwmattı saqlaw
this->DialogResult = System::Windows::Forms::DialogResult::OK;
this->Close(); // Jabıw
}
private: System::Void btnCancel_Click(...) {
this->DialogResult =
System::Windows::Forms::DialogResult::Cancel;
this->Close();
}
Kod (MyForm1.h):
MyForm2^ form2 = gcnew MyForm2();
if (form2->ShowDialog() == System::Windows::Forms::DialogResult::OK)
{
String^ age = form2->userAge; // Alıw
MessageBox::Show("Jasıńız: " + age);
} else {

MessageBox::Show("Biykar etildi");
}
ÁMELIY TAPSÍRMALAR
1. Bas formadan ekinshi formanı `ShowDialog()` penen ashıń.
2. Bas formadan ekinshi formanı `Show()` penen ashıń (ayırmashılıǵın
kóriń).
3. Ekinshi formanıń fon reńin Bas formadan jiberilgen reńge ózgertiń.
4. "Login" forması: Eger login/parol durıs bolsa, Bas forma ashılsın
(`Program.cpp` ni ózgertiw kerek bolıwı múmkin, yamasa Login formanı
Bas forma etip, keyin ekinshisin ashıw).
5. Ekinshi formadaǵı `TextBox` qa jazılǵan sózdi Bas formadaǵı `Label` ǵa
shıǵarıń.
6. Bas formada "Sazlawlar" túymesi bolsın, ol ekinshi formanı ashsın.
7. Ekinshi formada "Jabıw" túymesi bolsın (`this->Close()`).
8. Bas formadaǵı `CheckBox` jaǵdayın ekinshi formaǵa jiberiń.
9. "Text Editor": Bas formada `RichTextBox`, ekinshi formada "Font
Sazlawları" (Shrift, Ólshem). Sazlawlar `OK` basılǵanda qollanılsın.
10. "Dúkan": Birinshi formada tovarlar dizimi (`ListBox`), ekinshi formada
"Sebet" (Cart). Tovardı basqanda sebetke túsip, ekinshi formada kórinsin.
11. Ekinshi forma ashılǵanda, ol ekrandıń orayında (`StartPosition =
CenterParent`) ashılsın.
12. Eki forma arasında "Chat" (Simulyaciya): Birine jazsa, ekinshisinde
kórinsin (eki `Show()` qollanılǵan bolsa).
13. `DialogResult` tı qaytarmay-aq, `FormClosing` waqıyasında
paydalanıwshıdan "Saqlaw kerek pe?" dep soraw.
14. Bas formada `DataGridView` bolsın. "Redaktorlaw" túymesi ekinshi
formanı ashsın, onda maǵlıwmatlar ózgertilip, keri qaytarılsın.
15. Bir Bas forma hám úsh kómekshi forma jaratıń. Bas formadaǵı Menyudan
olar ashılsın.
Соседние файлы в папке 2-semestr
