A2: Application, Window sinflarini ishlatish
Download 203.9 Kb. Pdf ko'rish
|
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)
- Bu sahifa navigatsiya:
- Nazorat savollari 1. Ilova va ilovalar klassi.
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: 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: 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: 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: 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
ma'muriyatiga murojaat qiling