Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2-semestr / 9-lekciya_jif

.pdf
Скачиваний:
0
Добавлен:
20.09.2026
Размер:
208 Кб
Скачать
☆
9-lekciya. Paydalanıwshı interfeysin proektlestiriw. GUI ortalıǵında
dialog aynalardı bir-biri menen baylanıstırıw hám xabar aynaların jaratıw.
Jobası:
1. Paydalanıwshı interfeysi (UI) proektlestiriw principleri.
2. Xabar aynaları: `MessageBox` klası hám onıń imkaniyatları.
3. Kóp formalıq (Multi-Form) qosımshalar: Jańa forma jaratıw hám
kórsetiw.
UI Proektlestiriw principleri
Paydalanıwshı interfeysi (User Interface - UI) – bul programma menen
paydalanıwshı arasındaǵı baylanıs quralı. Sapalı UI programmanıń tabıslı bolıwınıń gilti esaplanadı. UI proektlestiriwde bir neshe tiykarǵı principlerge ámel etiw kerek. Birinshisi – "Ápiwayılıq" (Simplicity). Interfeys kerek emes elementlerden (túymeler, súwretler) taza bolıwı kerek. Paydalanıwshı ózine kerekli funkciyanı tez tabıwı tiyis. "Az – bul kóp" (Less is more) principi bul jerde júdá orınlı.
Ekinshisi – "Turaqlılıq" (Consistency). Programmanıń barlıq aynaları
(formaları) birdey stilde bolıwı kerek. Túymelerdiń reńi, shriftlerdiń ólshemi, menyulardıń jaylasıwı birdey bolıwı shárt. Eger "Saqlaw" túymesi bir jerde oń jaqta, ekinshi jerde shep jaqta bolsa, paydalanıwshı shatasıp ketedi. Windows standartlarına (mısalı, "OK" túymesi shepte, "Cancel" ońda) ámel etiw usınıs
etiledi.
Úshinshisi – "Keri baylanıs" (Feedback). Paydalanıwshı hár bir háreketinen
keyin programmadan juwap alıwı kerek. Túymeni basqanda ol "basılǵan" bolıp kóriniwi kerek. Uzaq operaciya (mısalı, fayl júklew) waqtında "kútiw belgisi" (Progress Bar yamasa Spinner) kórsetiliwi shárt. Eger programma qatıp qalsa hám hesh nárse kórsetpese, paydalanıwshı onı buzıldı dep oylaydı.
Tórtinshisi – "Qátelerge shıdamlılıq" (Error Tolerance). Interfeys
paydalanıwshınıń qáte basıwınıń aldın alıwı kerek. Mısalı, eger "Delete" (Óshiriw) túymesi basılsa, programma "Haqıyqattan da óshirmekshisiz be?" dep sorawı (Confirmation Dialog) kerek. Nadurıs maǵlıwmat kirgizilse, anıq hám túsinikli qáte xabarı (Error Message) shıǵıwı tiyis. "Qáte 404" degennen góre, "Fayl tabılmadı" degen jaqsıraq.
Xabar aynaları: MessageBox
Windows Forms-ta paydalanıwshıǵa qısqa xabar beriw yamasa onnan
tastıyıqlaw alıw ushın eń ápiwayı qural – bul `MessageBox` klassı. `MessageBox` modallı ayna (Modal Window) bolıp tabıladı, yaǵnıy ol ashılǵanda basqa aynalarǵa ótiw múmkin emes, paydalanıwshı dáslep xabardı oqıp, túymeni basıwı kerek.
`MessageBox::Show` metodı kóp túrli parametrlerdi qabıllaydı. Eń ápiwayı túri: `MessageBox::Show("Sálem!")`. Biraq biz oǵan Bas bet (Caption), Túymeler (Buttons) hám Ikonka (Icon) qosıwımız múmkin. `MessageBoxButtons` enum-ı arqalı `OK`, `OKCancel`, `YesNo`, `RetryCancel` sıyaqlı túymeler toparın tańlawǵa boladı. `MessageBoxIcon` arqalı `Information`, `Error`, `Warning`, `Question` ikonkaların qoyıwǵa boladı.
`MessageBox` tek xabar kórsetip qoymay, paydalanıwshınıń qaysı túymeni basqanınıń nátiyjesin (`DialogResult`) qaytaradı. Bul bizge interaktiv logikanı qurıwǵa imkaniyat beredi. Mısalı, paydalanıwshı "Yes" túymesin bassa bir is, "No" túymesin bassa basqa is qılıwǵa boladı.
Mısal (Tastıyıqlaw xabarı):
// Paydalanıwshıdan soraw
System::Windows::Forms::DialogResult result;
result = MessageBox::Show("Programmadan shıǵıwdı qáleysiz be?",
"Shıǵıw",
MessageBoxButtons::YesNo,
MessageBoxIcon::Question);
// Nátiyjeni tekseriw
if (result == System::Windows::Forms::DialogResult::Yes) {
Application::Exit(); // Programmanı jabıw
} else {
// Hesh nárse qılmaymız, paydalanıwshı qaldı
}
Formalardı baylanıstırıw: Jańa ayna ashıw
Haqıyqıy programmalar ádette bir emes, bir neshe ayna (Form) dan turadı (mısalı, Bas ayna, Sazlawlar aynası, Haqqında aynası). Visual Studio-da jańa
forma qosıw ushın "Project -> Add New Item -> UI -> Windows Form" tańlanadı. Jańa forma (mısalı, `MyForm2.h`) – bul bólek klass. Onı basqa formadan shaqırıw ushın, dáslep onıń bas faylın (`#include "MyForm2.h"`) qosıw
kerek.
Formanı kórsetiwdiń eki usılı bar: `Show()` hám `ShowDialog()`. `Show()` metodı formanı "modelsiz" (Modeless) rejimde ashadı. Yaǵnıy, jańa ayna ashılǵannan keyin de, paydalanıwshı eski ayna menen islese beredi. Bul kóbinese úskeneler paneli yamasa kómekshi aynalar ushın qollanıladı.
`ShowDialog()` metodı formanı "modallı" (Modal) rejimde ashadı. Yaǵnıy, jańa ayna jabılmaǵansha, eski aynaǵa (shagırǵan aynaǵa) ótiw múmkin emes. Programma kodı `ShowDialog()` qatarında toqtap turadı hám ayna jabılǵannan keyin ǵana dawam etedi. Bul eń kóp qollanılatuǵın usıl (mısalı, Login aynası
yamasa Dialoglar).
Mısal (Ekinshi formanı ashıw):
#include "MyForm2.h" // Ekinshi formanıń faylı
private: System::Void btnOpen_Click(System::Object^ sender, System::EventArgs^ e) {
// 1. Formanıń obyektin jaratıw
MyProject::MyForm2^ form2 = gcnew MyProject::MyForm2();
// 2. Kórsetiw (Modal rejimde)
form2->ShowDialog();
// 3. (Eger kerek bolsa) Formadan keyingi háreket
// delete form2; // C++/CLI da Garbage Collector bar, biraq geyde qol menen delete kerek bolıwı múmkin
}
Formalar arasında maǵlıwmat almasıw
Eki ayna ashılǵannan keyin, olar bir-biri menen maǵlıwmat almasıwı kerek boladı. Mısalı, Bas aynadan Sazlawlar aynasına "Házirgi reńdi" jiberiw, al Sazlawlar aynasınan "Jańa reńdi" alıp qaytıw. Bunıń eń durıs jolı – formalardıń (klasslardıń) **public** aǵzaları (ózgeriwshiler yamasa metodlar) arqalı.
Maǵlıwmat jiberiw (Pass Data): Ekinshi formada public ózgeriwshi yamasa arnawlı konstruktor jaratıladı. Birinshi forma ekinshi formanı jaratqanda (`gcnew`), sol ózgeriwshige mánis beredi. Mısalı: `form2->userName =
"Azamat"; form2->ShowDialog();`.
Maǵlıwmat alıw (Retrieve Data): Ekinshi formada public ózgeriwshi boladı (mısalı, `resultData`). Ekinshi ayna jabılǵannan keyin (`ShowDialog` pitkennen soń), birinshi forma sol obyekt arqalı maǵlıwmattı oqıydı. Mısalı: `String^ res = form2->resultData;`. Sonday-aq, `DialogResult` qásiyeti arqalı paydalanıwshınıń "OK" yamasa "Cancel" basqanın biliwge boladı.
Mısal (Maǵlıwmat almasıw):
MyForm2.h (Ekinshi forma):
public:
String^ inputText; // Maǵlıwmat saqlawshı
private: System::Void btnOK_Click(...) {
inputText = textBox1->Text; // TextBox-tan alıw
this->DialogResult = System::Windows::Forms::DialogResult::OK;
this->Close();
}
MyForm1.h (Bas forma):
MyForm2^ form2 = gcnew MyForm2();
if (form2->ShowDialog() == System::Windows::Forms::DialogResult::OK) {
String^ data = form2->inputText; // Maǵlıwmattı alıw
label1->Text = "Kelgen maǵlıwmat: " + data;
}
Bul usıl arqalı quramalı interfeysli, kóp aynalı programmalar jaratıwǵa boladı. Eń baslısı – formalardı bir-birine dım qattı baylanıstırıp (tight coupling) qoymaw kerek, maǵlıwmat almasıwdı anıq interfeys (public properties) arqalı ámelge asırıw zárúr.
BAQLAW SORAWLARÍ:
1. Paydalanıwshı interfeysin proektlestiriwdegi "Turaqlılıq" (Consistency)
principi neni ańlatadı?
2. `MessageBox::Show` metodı qanday mánisti (`DialogResult`) qaytaradı
hám ol ne ushın kerek?
3. `Show()` hám `ShowDialog()` metodlarınıń tiykarǵı ayırmashılıǵı
(modallıq) nede?
4. Bir formadan ekinshi formaǵa maǵlıwmat jiberiwdiń eń ápiwayı jolı
qanday (public aǵzalar)?
5. `DialogResult` qásiyeti formanı jabıwda qanday rol oynaydı?
Соседние файлы в папке 2-semestr