Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2-semestr / 9-lekciya_jif
.pdf
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.
4. Formalar arasında maǵlıwmat almasıw usılları.
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
