A2: Application, Window sinflarini ishlatish


Download 203.9 Kb.
Pdf ko'rish
Sana30.10.2022
Hajmi203.9 Kb.
#887788
Bog'liq
2 amaliy mashg`ulot
PQ-2733 19.01.2017, PQ-2733 19.01.2017, PQ-2733 19.01.2017, PQ-2733 19.01.2017, 1-mavzu, Talim vazirligi buxoro davlat universiteti fizika-matematika fak (1), jurnal, 17, 20, 3-variant, 1959396, markaz, Maktabga tayyorlov guruhlari mashg, 1669204312 (1)


A2: Application, Window sinflarini ishlatish. 
Ilova va ilovalar klassi: Oldingi boblarda biz to'g'ridan-to'g'ri Window sinfi bilan
ifodalanadigan dastur oynasi bilan ishladik, uning belgilanishi, unga elementlar 
qo'shildi va u uchun C# kodini yaratdik. Biroq, dasturning o'zi Window sinfidan 
emas, balki Application sinfidan boshlanadi. Odatiy bo'lib, WPF loyihasi 
yaratilganda App.xaml fayli va tegishli kod sinfi App.xaml.cs yaratiladi: 
App.xaml fayli quyidagicha ko'rinadi: 
xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation

xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml

xmlns:local="clr-namespace:LifecycleApp" 
StartupUri="MainWindow.xaml"> 
 
 
 
Ilova elementi x:Class atributidan ilovaning olingan sinfining toʻliq nomini 
koʻrsatish uchun foydalanadi. Odatiy bo'lib, sinf loyiha nomi bilan App deb ataladi, 
ya'ni bu holda LifecycleApp.App. 
Odatda, ushbu faylning asosiy maqsadi dastur uchun umumiy bo'lgan resurslarni 
aniqlashdir. Shuning uchun, sukut bo'yicha, bu erda bo'sh Application.Resources 
elementi aniqlangan bo'lib, unga aslida resurslar joylashtirilgan. 
Shuningdek, bu yerda, deklarativ tarzda, dastur hodisalariga ishlov beruvchilarni 
biriktirishingiz mumkin. 
StartupUri atributi dasturning bajarilishi boshlanadigan xaml belgisiga yo'lni 
belgilaydi. Odatiy bo'lib, bu MainWindow.xaml faylida belgilangan MainWindow 
tartibidir. Agar ilovada bir nechta oyna mavjud bo'lsa, bu erda dastur chaqirilganda 
ishga tushadigan oynani belgilashimiz mumkin. 
App.xaml.cs faylida App sinfining ta'rifi ham mavjud. Odatiy bo'lib, bu sinf 
butunlay bo'sh: 
public partial class App : Application 




Unda biz dastur hodisalari ishlov beruvchilarini yoki butun dastur uchun 
boshqa global mantiqni o'rnatishimiz mumkin. 
Shunday qilib, App.xaml va App.xaml.cs fayllari bir xil Ilova sinfining ta'rifini o'z 
ichiga oladi. Biroq, ular oxir-oqibat bitta ilova fayliga, App.g.csga kompilyatsiya 
qilinadi, uni loyihaning obj/Debug katalogida ilovani kompilyatsiya qilgandan so'ng 
topishingiz mumkin, bu quyidagicha ko'rinadi: 
public partial class App : System.Windows.Application { 
[System.Diagnostics.DebuggerNonUserCodeAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", 
"4.0.0.0")] 
public void InitializeComponent() { 
this.StartupUri = new System.Uri("MainWindow.xaml", 
System.UriKind.Relative); 

[System.STAThreadAttribute()] 
[System.Diagnostics.DebuggerNonUserCodeAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", 
"4.0.0.0")] 
public static void Main() { 
LifecycleApp.App app = new LifecycleApp.App(); 
app.InitializeComponent(); 
app.Run(); 


Dasturga kirish nuqtasi (boshqa C# ilovasi kabi) dasturning namunasini 
yaratuvchi va dastlabki ishga tushirishni amalga oshiradigan va asosiy dastur 
oynasiga qo'ng'iroqlarni amalga oshiradigan Asosiy usuldir. 
Chunki WPF Yagona torli kvartirada ishlash uchun asosiy ipni talab qiladi, 
Main usuli STAThreadAttribute atributi bilan belgilanadi. Bir ipli kvartirada bitta 
ip, bu holda asosiy ip mavjud. Bu shuni anglatadiki, ushbu mavzuda yaratilgan 
elementlarga faqat bitta ipdan kirish mumkin. Shu bilan birga, WPF mavzular 
o'rtasida muloqot qilishning samarali usulini taklif qiladi, bu haqda keyinroq 
gaplashamiz. 
InitializeComponent usuli yordamida dastur ishga tushiriladi: asosiy oyna ishga 
tushiriladi. Va keyin dasturning o'zi app.Run() chaqiruvi orqali ishga tushiriladi. 
Biroq, bu dastur fayllari uchun qattiq kodlangan tashkilot emas va biz uni 
bekor qilishimiz va ilovaning kirish nuqtasini o'zimiz belgilashimiz mumkin. 
Buning uchun, avvalo, App.xaml.cs kodini o'zgartiring: 
public partial class App : Application 

App() 

InitializeComponent(); 

[STAThread] 


static void Main() 

App app = new App(); 
MainWindow window = new MainWindow(); 
app.Run(window); 


Aslida, App.xaml.cs fayli kompilyatsiya qilingan App.g.cs fayliga o'xshash 
bo'ldi. Bu erda biz darhol Main usulini aniqlaymiz va asosiy oynani ishga tushiramiz 
MainWindow. 
Shundan so'ng, App.xaml faylini quyidagicha o'zgartiring: 
xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation

xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml

xmlns:local="clr-namespace:LifecycleApp" > 
 
 
 
 
Bunday holda, StartupUri atributi olib tashlandi, chunki ilovaning asosiy oynasi 
endi sinfning o‘zidan ishga tushirilgan va Grid elementi uchun uslub belgilangan 
bo‘lib, u sukut bo‘yicha MainWindow.xaml da mavjud. 
Keyin, App.xaml faylining xususiyatlar oynasida Build Action maydonidagi 
qiymatni Page ga o'zgartiring: 
Va ishga tushirilgandan so'ng, biz qizil rangga bo'yalgan panjarali oynani 
ko'ramiz. 
ShutdownMode xususiyati. ShutdownMode xossasi ilova qanday chiqishi va 
quyidagi qiymatlardan birini qabul qilishi mumkinligini bildiradi: 
OnMainWindowClose: Ilova asosiy oyna ochiq bo'lganda ishlaydi 
OnLastWindowClose: Ilova kamida bitta oyna ochiq ekan ishlaydi 
OnExplicitShutdown: Ilova Application.Shutdown() aniq chaqirilguncha ishlaydi 


Xaml kodida ShutdownMode xususiyatini o'rnatishingiz mumkin: 
xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation

xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml

xmlns:local="clr-namespace:LifecycleApp" 
StartupUri="MainWindow.xaml" ShutdownMode="OnLastWindowClose">
yoki App.xaml.cs da aniqlang:
public partial class App : Application 

public App() 

this.ShutdownMode = ShutdownMode.OnLastWindowClose; 


Ilova voqealari 
Ilova sinfi butun dastur uchun ishlatilishi mumkin bo'lgan voqealar to'plamini 
belgilaydi: 
Ishga tushirish: Application.Run() usuli chaqirilgandan keyin va asosiy oyna 
ko'rsatilishidan oldin sodir bo'ladi 
Faollashtirilgan: Ilova oynalaridan biri faollashtirilganda paydo bo'ladi 
O'chirilgan: oyna fokusni yo'qotganda ishga tushadi 
SessionEnding: Windows sessiyasi joriy foydalanuvchi qayta ishga tushganda, 
oʻchirilganda yoki tizimdan chiqqanda tugashi bilan sodir boʻladi. 
DispatcherUnhandledException: ishlov berilmagan istisno sodir bo'lganda 
ko'tariladi. LoadCompleted: Ilova yuklashni tugatgandan so'ng ko'tariladi 
Chiqish: ilova chiqqanda ishga tushiriladi. Bu asosiy yoki oxirgi oynaning yopilishi, 
Application.Shutdown() usuli yoki seansning oxiri boʻlishi mumkin. 
Xuddi elementlar uchun bo'lgani kabi, xaml belgisida bir xil nomdagi atributlar 
uchun hodisa ishlov beruvchilari aniqlanadi. Masalan, Startup hodisasini ko'rib 
chiqamiz: 
xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation

xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml

xmlns:local="clr-namespace:LifecycleApp" 
StartupUri="MainWindow.xaml" Startup="App_Startup"> 
 
 
 
Keyin, App.xaml.cs bog'langan kod faylida voqea ishlov beruvchisini yozing: 
public partial class App : Application 

//Запуск одной копии приложения 
System.Threading.Mutex mutex; 
private void App_Startup(object sender, StartupEventArgs e) 



bool createdNew; 
string mutName = "Приложение"; 
mutex = new System.Threading.Mutex(true, mutName, out createdNew); 
if (!createdNew) 

this.Shutdown(); 
}


Natijada, har safar ushbu ilovaning yangi nusxasi ishga tushirilganda, voqea ishlov 
beruvchisi dastur allaqachon ishlayotganligini aniqlaydi va agar u ishlayotgan bo'lsa, 
bu nusxa o'z ishini yakunlaydi. 
Ilova ekranini yarating 
Ilovalar har xil, ba'zilari tezda ochiladi, boshqalari unchalik emas. Va qandaydir 
tarzda foydalanuvchini dastur yuklab olinayotgani haqida xabardor qilish uchun ular 
tez-tez ekran yoki ekran ekranidan foydalanadilar. WPF-da tasvirga asoslangan 
oddiy ekranlarni yaratish juda oson. Buning uchun loyihaga bir oz rasm qo'shing va 
uni qo'shgandan so'ng uning BuildAction xususiyatini Xususiyatlar oynasida 
SplashScreen ga o'rnating. Va ishga tushirilgandan so'ng, dastur oynasi paydo 
bo'lguncha, ekran pardasi tasviri ekranda osilib turadi. 
Joriy ilovaga kirish 
Biz ushbu ilovaning istalgan joyidan joriy ilovaga kirishimiz mumkin. Buni 
Application sinfida belgilangan Current xossasi yordamida amalga oshirish 
mumkin. Shunday qilib, keling, tugmani bosish kodini quyidagiga o'zgartiramiz: 
private void Button1_Click(object sender, RoutedEventArgs e) 

foreach (Window window in Application.Current.Windows) 

MessageBox.Show(window.ToString()); 


Shunday qilib, tugma bosilganda, biz ushbu ilovaning barcha oynalari nomlari bilan 
bir yoki bir nechta xabarlarni olamiz. 
 
Nazorat savollari 
1. Ilova va ilovalar klassi.

2. ShutdownMode xususiyati

3. App sinfining ta'rifi.

Download 203.9 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2023
ma'muriyatiga murojaat qiling