Monday, October 14, 2024

GUI प्रोग्रामिंग विद विण्डोज़ फॉर्मस् | GUI Programming with Windows Forms (Part-1) – Best Info

GUI प्रोग्रामिंग विद विण्डोज़ फॉर्मस् | विण्डोज़ फॉर्मस् ग्राफिकल यूजर इंटरफेस | GUI प्रोग्रामिंग विण्डोज़ फॉर्मस् के साथ | GUI प्रोग्रामिंग विजुअल बेसिक  | GUI Programming with Windows Forms

GUI प्रोग्रामिंग विद विण्डोज़ फॉर्मस् का परिचय (Introduction) –  विण्डोज़ फॉर्मस् ग्राफिकल यूजर इंटरफेस को विकसित करने के लिए विजुअल स्टूडियो में सबसे महत्वपूर्ण उपकरण है। यह ग्राफिकल यूज़र इंटरफेस एप्लिकेशन निर्माण का आधार है। विजुअल स्टूडियो में बने एप्लिकेशन विण्डोज़ फॉर्मस् के अतिरिक्त कई कंट्रोलों का एक संकलन है। विण्डोज़ फॉर्म इन कंट्रोलों का वाहक होता है । विण्डोज़ फॉर्म किस पुस्तक के एक पृष्ठ के समान होता है। इस अध्याय में हम ग्राफिकल यूज़र इंटरफेस को विकसित करने के लिए उपयोग होने वाले कंट्रोलों के बारे में चर्चा करेंगे।

प्रॉपर्टीज़, मेथडस तथा इवेण्ट्स (Properties, Methods And Events)

विजुअल बेसिक के सभी ऑब्जेक्ट यथा फॉर्म तथा कंट्रोल के अपने प्रॉपर्टी, मेथड तथा इवेण्ट होते हैं । प्रॉपर्टी किसी ऑब्जेक्ट के एट्रिब्यूट होते हैं तथा मेथड उनके कार्य और इवेण्ट उनके रेस्पॉन्स (response) होते हैं । उदाहरण के लिए कार एक ऑब्जेक्ट है तथा इसके अपने प्रॉपर्टी, मेथड तथा इवेण्ट हैं। रंग (color), गति (speed), मूल्य (price) किसी कार के प्रॉपर्टी हो सकते हैं। सभी कार के ये प्रॉपर्टी होंगे परन्तु इनके मान अलग अलग हो सकते हैं।

इसी प्रकार कार के मेथड जो यह करता है हो सकते हैं। स्टार्ट (Start), स्टॉप (Stop), एक्सिलिरेट (Accelerate) इसके कार्य या मेथड हो सकते हैं। सभी प्रकार के कार के लिए ये मेथड समान होंगे अपितु इनके मान अलग अलग होंगे। तथा कार के कुछ बाहरी इवेण्ट के विपरित प्रतिक्रिया होंगे । उदाहरण के लिए कार का इंधन समाप्त होने पर क्या होगा। कार के प्रॉपर्टी का मान अगर लिखा जाय तो इस प्रकार होगा –

Car.Color = Aqua
Car.Speed = 80
Car.Price = 320000

इसी प्रकार कार के मेथड इस प्रकार होगें –
Car.Start
Car.Stop
Car.Accelerate (50)

इसी प्रकार कार के इवेण्ट NoFuel इस प्रकार लिखे जाएंगे –
Private Sub Car_NoFuel (…) Handles Car. NoFuel
Car. Stopped = True
End Sub

यहाँ कार के इंधन समाप्त होने पर कार के आचरण का वर्णन होता है । जिस प्रकार आपने कार के उदाहरण में प्रॉपर्टी, मेथड तथा इवेण्ट के कार्य को समझा ठीक इसी प्रकार विजुअल बेसिक डॉट नेट के ऑब्जेक्ट होते हैं तथा उनके प्रॉपर्टी, मेथड तथा इवेण्ट होते हैं जिनहें प्रोग्राम में प्रयोग करना होता है ।

GUI प्रोग्रामिंग विद विण्डोज़ फॉर्मस् | विजुअल बेसिक डॉट नेट के ऑब्जेक्ट | GUI प्रोग्रामिंग – Properties, Methods And Events

GUI प्रोग्रामिंग विद विण्डोज़ फॉर्मस्  | विण्डोज़ फॉर्मस् ग्राफिकल यूजर इंटरफेस | GUI प्रोग्रामिंग विण्डोज़ फॉर्मस् के साथ | GUI प्रोग्रामिंग विजुअल बेसिक  | GUI Programming with Windows Forms
GUI प्रोग्रामिंग विद विण्डोज़ फॉर्मस् | विण्डोज़ फॉर्मस् ग्राफिकल यूजर इंटरफेस | GUI प्रोग्रामिंग विण्डोज़ फॉर्मस् के साथ | GUI प्रोग्रामिंग विजुअल बेसिक | GUI Programming with Windows Forms

वी. बी. डॉट नेट के कंट्रोल में उपलब्ध कुछ समान प्रॉपर्टी (Some Common Properteis Available in VB.Net Controls)

वी. बी. डॉट नेट में ढ़ेर सारे कंट्रोल हैं। सबके अपने-अपने अलग-अलग प्रॉपर्टी, मेथड तथा इवेण्ट हैं। यद्यपि सभी के कुछ समान प्रॉपर्टी, मेथड तथा इवेण्ट होते हैं। इस खण्ड में उनहीं समान प्रॉपर्टी, मेथड तथा इवेण्ट की चर्चा करेंगे।

यह भी देखें :  Top 100 FAQ VB.Net Programming Part-2

1- AllowDrop प्रॉपर्टी – AllowDrop प्रॉपर्टी यह संकेत देता है कि यह कंट्रोल यूजर के द्वारा ड्रैग कर डाटा इस पर ड्रॉप किये जाने पर स्वीकार करता है अथवा नहीं। यह यदि True सेट है तो समझिए कि इस कंट्रोल में ड्रैग-ड्रॉप सुविधा उपलब्ध है। यदि False है तो समझिए कि इस पर ड्रैग ड्रॉप सुविधा उपलब्ध नहीं है। यह प्रॉपर्टी कुछ कंट्रोल यथा RichTextBox, WebBrowser इत्यादि में उपलब्ध नहीं है।

2- Anchor प्रॉपर्टी – Anchor प्रॉपर्टी कनटेनर के किस किनारे के साथ कंट्रोल किस प्रकार जुड़ा रहेगा तथा उस पेरेण्ट कनटेनर के साथ इसके आकार में किस प्रकार बदलाव पड़ेगा यह सेट करता है। Anchor प्रॉपर्टी इंटरफेस डिज़ायन के लिए एक बेहद महत्त्वपूर्ण प्रॉपर्टी है। यह तब और उपयोगी हो जाता है, जब एक फॉर्म पर एक से अधिक कंट्रोल को एक से अधिक कॉलम तथा पंक्ति में सजाना है। उदाहरण के लिए आपने अपने फॉर्म में एक टेक्स्टबॉक्स जोड़ा है और उसकी Anchor प्रॉपर्टी में Top सेट किया है।

अब आप जब टेक्सटबॉक्स की Anchor प्रॉपर्टी को Top सेट करते हैं और इसे रन करते हैं तो टेक्स्ट बॉक्स और फॉर्म के उपरी हिस्सा की जो दूरी है, वह उसी अनुपात में बढ़ता है, परन्तु फॉर्म के शीर्ष तथा टेक्स्ट बॉक्स की दूरी नहीं बदलती।

Anchor प्रॉपर्टी में Left, Top, Right, Bottom, (Top, Left), (Top, Left, Right), (Top, Left, Right, Bottom) इत्यादि जैसे मान होते हैं। इनहें चयन करने के लिए Anchor प्रॉपर्टी के डाउन ऐरो को क्लिक करते हैं तथा मान का चयन करते हैं। जब आप Anchor प्रॉपर्टी को सेट कर लेते हैं तो Dock प्रॉपर्टी को सेट करने की आवश्यकता नगण्य होती है।

3- Back Color प्रॉपर्टी – Back Color प्रॉपर्टी को सेट कर आप टेक्स्ट के बैकग्राउण्ड रंग को बदलते हैं। इस प्रॉपर्टी के डाउन ऐरो को जब आप क्लिक करते हैं तो Custom, Web तथा System टैब के अंदर आपको विभिन्न रंगों का एक छोटा विण्डो मिलता है।

4- Background Image प्रॉपर्टी – BackgroundImage प्रॉपर्टी से आप कंट्रोल के बैकग्राउण्ड आकृति को सेट कर सकते हैं। बैकग्राउण्ड आकृति सेट करने के लिए इसके इलिपसिस बटन (…) को क्लिक करें। तत्पश्चात् Select Resource डायलॉग बॉक्स प्रदर्शित होगा। अपने हार्डडिस्क या इस प्रोजेक्ट फोल्डर के Resources फोल्डर से किसी फाइल को जोड़ने के लिए Project resource file: के अंदर Import को क्लिक करें और आकृति फाइल का चयन करें।

ऐसा करने में यदि यह फाइल आपके प्रोजेक्ट/सॉल्यूशन के Resources फोल्डर में तत्काल उपलब्ध नहीं होगा तो भविष्य में संग्रहित हो जायेगा। यह प्रॉपर्टी सभी कंट्रोल यथा Tex Box, RichTextBox इत्यादि के लिए उपलब्ध नहीं होता।

5- Causes Validation प्रॉपर्टी – Causes Validation वह मान सेट करता है जो यह संकेत करता है कि बटन (कंट्रोल) के क्लिक होने पर वैलिडेशन सम्पन्न हो या नहीं। डिफॉल्ट पेज वैलिडेशन बटन के क्लिक किये जाने पर होता है। इसमें दो मान True और False होते हैं। पेज वैलिडेशन को रोकने के लिए इसका मान False सेट किया जाता है।

6- Cursor प्रॉपर्टीकंट्रोल पर माउस ले जाने पर किस प्रकार माउस आकृति प्रकट होगा। इसे सेट करने के लिए Cursor प्रॉपर्टी की सहायता लेते हैं। जब आप Cursor के डाउन ऐरो को क्लिक करेंगे तो अनेक कर्सर दिखेंगे। इच्छानुसार उनमें से एक का चयन कर सकते हैं।

7- Dock प्रॉपर्टी – Dock प्रॉपर्टी और Anchor प्रॉपर्टी एक दूसरे के साथ मिलकर कार्य करते हैं। उदाहरण के लिए जब आप Anchor को None सेट करते हैं, तब Dock प्रॉपर्टी भी None ही सेट होगा। Dock प्रॉपर्टी कंट्रोल का कौन सा बॉर्डर कनटेनर (उदाहरणार्थ फॉर्म, ग्रुपबॉक्स, पैनल) से सटा होगा, यह परिभाषित करता है।

यह भी देखें :  कंप्यूटर कीबोर्ड का इतिहास | Best History Of Computer Keyboard

उदाहरण के लिए आप नोटपैड एप्लिकेशन बना रहे हैं, जिसमें आपने टेक्स्टबॉक्स या रिचटेक्स्टबॉक्स जोड़ा है। स्पष्ट है कि नोटपैड एप्लिकेशन में टेक्स्ट बॉक्स या रिच टेक्स्ट बॉक्स पूरे फॉर्म पर फैला हुआ होना चाहिए। इसके लिए आप टेक्स्ट बॉक्स या रिच टेक्स्ट बॉक्स के चारो किनारों को फॉर्म के साथ सटाना पड़ेगा। इसके लिए में Fill सेट करते हैं।

8- Enabled प्रॉपर्टी – Enabled प्रॉपर्टी कंट्रोल के सक्रियता एवं निष्क्रियता को सेट करता है। इसका बाई डिफॉल्ट सेटिंग True होता है। यदि ऐसा है तो इसके साथ कार्य किया जा सकता है। यदि यह False है तो यह निष्क्रिय है और इसके साथ कार्य नहीं किया जा सकता है।

9- Font प्रॉपर्टी – Font प्रॉपर्टी कंट्रोल के टेक्स्ट के फॉण्ट को सेट करता है। आप Font के दायीं ओर इलिपसिस बटन (…) को क्लिक कर Font डायलॉग बॉक्स से फॉण्ट का चयन कर सकते हैं या फिर Font के जोड़ चिन्ह को क्लिक कर इसके सभी विकल्पों यथा फॉण्ट का नाम, आकार इत्यादि का चयन कर सकते हैं।

10- ForeColor प्रॉपर्टी – ForeColor प्रॉपर्टी कंट्रोल के फोरग्राउण्ड रंग को सेट करता है। ForeColor के डाउन ऐरो को क्लिक करने पर Back Color की तरह ही रंगों का एक छोटा विण्डो प्रकट करता है।

11- Location प्रॉपर्टी – Location प्रॉपर्टी कंट्रोल कनटेनर (यथा फॉर्म, पैनल, ग्रपुबॉक्स इत्यादि) पर ऑब्जेक्ट कहाँ स्थित है, यह सेट करता है। Location प्रॉपर्टी का X मान कॉलम का स्थान तथा Y मान पंक्ति का स्थान निर्धारित करता है।

12- Name प्रॉपर्टी – Name प्रॉपर्टी कंट्रोल के नाम को सेट करता है। हर कंट्रोल का एक Name प्रॉपर्टी होता है। इसका उपयोग कोड में आपके कंट्रोल को व्यक्त करने के लिए होता है। बाई डिफॉल्ट कंट्रोल के नाम उनके नाम के बाद 1, 2, 3 इत्यादि जोड़ कर दिये जाते हैं। उदाहरण के लिए टेक्स्ट बॉक्स कंट्रोल का बाई डिफॉल्ट नाम TextBox1, TextBox2, TextBox3 इत्यादि होता है। किन्तु आप प्रॉपर्टीज विण्डो से Name प्रॉपर्टी का उपयोग कर किसी भी कंट्रोल का नाम इच्छानुसार दे सकते हैं।

Name प्रॉपर्टी सूची के वर्णमाला क्रम में सामान्यतः तीसरे स्थान पर होता है। कंट्रोल का नाम अक्षर के साथ शुरू होना चाहिए तथा यह अधिक बड़ा न हो तो बेहतर है। इसमें संख्या तथा अंडरस्कोर मान्य है। परन्तु विराम चिह्न (punctuation) तथा रिक्त स्थान स्वीकार्य नहीं होता है। साथ ही अच्छी प्रोग्रामिंग प्रचलन के अनुसार किसी कंट्रोल के शुरूआत तीन अक्षरों के पूर्वसर्ग (prefix) जो इस कंट्रोल का संक्षिप्त रूप होता है से अच्छा माना जाता है।

उदाहरण के लिए टेक्स्ट बॉक्स, बटन, लेबल तथा लिस्ट बॉक्स के नाम में txt, btn, IbI तथा Ist क्रमशः कोडिंग के लिए सुविधाजनक होता है।

13- Size प्रॉपर्टी – Size प्रॉपर्टी कंट्रोल के आकार को सेट करता है। यदि किसी ऑब्जेक्ट का AutoSize प्रॉपर्टी True सेट है तो इस प्रॉपर्टी की प्रासंगिकता समाप्त हो जाती है ।

14- TabIndex प्रॉपर्टी – TabIndex प्रॉपर्टी कनटेनर में कंट्रोल के टैब क्रमांक को सेट करता है। टैब पोजीशन वह है जो आप टैब की सहायता से एक स्थान (कंट्रोल) से दूसरे स्थान (कंट्रोल) को फोकस करने के लिए करते हैं। उदाहरण के लिए आपने एक बटन, एक लेबल, एक टेक्स्टबॉक्स इसी क्रम में बनाया है तो इसका टैब पोजीशन 0, 1 और 2 होगा। अर्थात् टैब की सहायता से सबसे पहले बटन फिर लेबल और अंत में टेक्स्टबॉक्स का चयन/फोकस होगा।

यह भी देखें :  कम्प्यूटर की-बोर्ड एवं की-बोर्ड के प्रकार | Computer Keyboards And Types Of Keyboards – Best Info In Hindi

15- Text प्रॉपर्टी – Text प्रॉपर्टी कंट्रोल के कैप्शन (Caption) को सेट करता है। उदाहरणार्थ लेबल पर छपे टेक्स्ट Label1 को बदलने के लिए इसका प्रयोग होता है। इसमें आप एक्सेस की सेट कर सकते हैं जिसके साथ ALT की को दबाने पर वह फोकस हो जायगा। इसके लिए टेक्स्ट प्रॉपर्टी के मान के उस अक्षर के पहले & टाइप करें । यह फीचर आपको की-बोर्ड के साथ काम करने का विक्लप देता है ।

16- UseMnemonic प्रॉपर्टी – आपने एक्सेस की का प्रयोग किया होगा । एक्सेस की का प्रयोग किसी ऑब्जेक्ट को की-बोर्ड से एक्सेस करने में होता है । वी बी डॉट नेट में भी आप विभिन्न कंट्रोल के लिए एक्सेस की डिफाइन कर सकते हैं लेकिन इसके लिए आपको UseMnemonic प्रॉपर्टी को True सेट करना होगा । UseMnemonic प्रॉपर्टी विशेष अक्षरों को निमोनिक की तरह समझा जाय अथवा नहीं इसे सेट करता है । 

आओ सीखें-1  एक विण्डोज़ एप्लिकेशन बनाएं जिसपर दो बटन तथा एक लेबल फॉर्म पर जोड़ें । तथा दोनों बटन में एक्सेस की सेट करें। इसे रन कराने के लिए ALT की के साथ एक्सेस की का प्रयोग करें। इसका इंटरफेस तथा प्रॉपर्टी इस प्रकार होगा –

ऑब्जेक्टप्रॉपर्टीमान
फॉर्मNameForm1
 MaximizeBoxFalse
 TextLab Exercise 7.1
लेबलNameLabell
 Textबाइ डिफॉल्ट रहने दें ।
बटनNamebtnGreet
 Text&Greet
बटनNamebtnFarewell
 Text& Farewell

समाधान :

  • File मेन्यू को क्लिक करें तथा New Project का चयन करें ।
  • New Project डायलॉग बॉक्स खुलने के पश्चात Templates पेन में Windows Application को क्लिक करें।
  • Name टेक्स्टबॉक्स में Lab Exercise 7.1 टाइप करें तथा OK को क्लिक करें । उसके बाद एक नया विण्डोज फॉर्मस प्रोजेक्ट खुलेगा ।
  • फॉर्म पर प्रश्न में दिए गए विवरण के अनुसार टूलबॉक्स से कंट्रोल को जोड़ें। तथा प्रश्नानुसार उनके प्रॉपर्टी को सेट करें तथा चित्रानुसार उनहें सजाएँ ।
  • Greet बटन को दो बार क्लिक करें और btnGreet_Click इवेण्ट हैण्डलर के लिए निम्नलिखित कोड लिखें-

Label1. Text = “Welcome” 

  • उसके बाद Farewell बटन को दो बार क्लिक करें और btnFarewell_Click इवेण्ट हैण्डलर के लिए निम्नलिखित कोड लिखें-
    Labell. Text = “Good Bye”
  • F5 दबाएँ। तथा ALT+ G और ALT+ F दबाकर लेबल के टेक्स्ट को दर्शाएं । यहाँ आपने माउस का प्रयोग नहीं किया है।

वी. बी. डॉट नेट के कंट्रोल के कुछ समान मेथड (Some Common Methods Of Control)

पिछले खण्ड में आपने वी. बी. डॉट नेट कंट्रोल के समान प्रॉपर्टी के बारे में जाना । ये ऐसे प्रॉपर्टी हैं जो सामान्यतः सभी कंट्रोल में पाये जाते हैं । इस खण्ड में वी. बी. डॉट नेट कंट्रोल के समान मेथड के बारे में जानेंगे ।

BringToFront()- कंट्रोल के ढेर (एक पर एक सजा हुआ) से किसी विशेष कंट्रोल को ऊपर करता है। उदाहरण के लिए आपने Button1, Button2, Button3 और Button4 एक के ऊपर एक सजाया हुआ है। Button3 को ऊपर लाने के लिए Button3.BringToFront( ) स्टेटमेण्ट कार्य करेगा।
Dispose()कंट्रोल के द्वारा उपयोग किये गये संसाधनों (resources) को रिलीज करता है। उदाहरण के लिए PictureBox1.Image.Dispose पिक्चरबॉक्स कंट्रोल के द्वारा लिए गए स्थान को मेमोरी से मुक्त करता है ।
Contains () बूलियन मान (True या False ) लौटाता है जो यह सूचित करता है कि कोइ विजुअल बेसिक Collection ऑब्जेक्ट एक खास की के साथ कोइ अवयव (element) रखता है अथवा नहीं । 
DoDragDrop () – ड्रैग ड्राप क्रिया को शुरू करता है ।
FindForm () उस फॉर्म को प्राप्त करता है जिस पर यह कंट्रोल है।
Focus () – कंट्रोल पर इनपुट फोकस सेट करता है।
GetChildAt Point() उस चाइल्ड कंट्रोल को पुनः प्राप्त करता है जो कि एक निर्धारित लोकेशन पर है, यह स्पष्ट करते हुए कि एक खास प्रकार के चाइल्ड कंट्रोल की अपेक्षा की जाय अथवा नहीं।
Hide () कंट्रोल को छिपाता है।
Refresh () कंट्रोल से इसके क्लाइण्ट एरिया को रद्द करवाता है तथा सब को फिर से शुरू करने का आग्रह करता है।
Select() कंट्रोल को एक्टिवेट करता है।
Show () – कंट्रोल को दर्शाता हैं।

वी. बी. डॉट नेट के कंट्रोल के कुछ समान इवेण्ट (Some Common Events of Control)

जिस प्रकार आपने पिछले खण्ड में वी. बी. डॉट नेट कंट्रोल के समान प्रॉपर्टी तथा मेथड के बारे में जाना । इसी प्रकार वी बी डॉट नेट के कुछ ऐसे इवेण्ट हैं जो सामान्यतः सभी कंट्रोल में पाये जाते हैं । इस खण्ड में वी. बी. डॉट नेट कंट्रोल के समान इवेण्ट के बारे में जानेंगे।

AutoSizeChanged यह इवेण्ट डॉट नेट फ्रेमवर्क के 2.0 संस्करण में ही परिचित हुआ है। यह तब घटित होता है, जब Autosize प्रॉपर्टी के मान में बदलाव होता है।
Click कंट्रोल के क्लिक होने पर घटित होता है।
ControlAdded यह तब घटित होता है जब आपके कंट्रोल कलेक्शन (यथा फॉर्म) में कोई नया कंट्रोल जुड़ता है।
ControlRemoved यह ControlAdded का विपरीत है। यह तब घटित होता है, जब कोई कंट्रोल फॉर्म से हटता है।
Double Click किसी कंट्रोल (यथा बटन) के दो बार क्लिक होने पर घटित होता है।
Enter कंट्रोल पर एण्टर की दबाने पर घटित होता है।
LocationChanged किसी कंट्रोल का Location प्रॉपर्टी के बदलने पर घटित होता है।
Move किसी कंट्रोल मूव होने पर घटित होता है।

सवाल : इवेण्ट क्या है ?
जवाब- इवेण्ट को समझने का एक उदाहरण इस तरह है। आप मोबाइल का उपयोग अपने मित्र से बातचीत करने के लिए करते हैं। अब आपने एक प्रोग्राम बनाया तथा अपने मित्र को यह कह दिया कि उसे कॉल नहीं करेगा बल्कि रिंग के माध्यम से संकेत देगा । यदि एक रिंग हो तो समझो प्रोग्राम रद्द और यदि दो-बार रिंग होता है तो समझो प्रोग्राम पारित।

अब आपका मित्र इसी संकेत के अनुसार अपना कार्य करेगा । ऐसा कुछ वी.बी. डॉट नेट में भी होता है। एक रिंग को Click तथा दो रिंग को DoubleClick इवेण्ट की तरह समझ सकते हैं। क्योंकि ये एक विशेष परिस्थिति में हो रहे हैं। इवेण्ट पर आधारित स्टेटमेण्ट को इवेण्ट हैण्डलर या सब प्रॉसीजर या सब-रूटीन कहते हैं। 

विजुअल बेसिक डॉट नेट और भी महत्वपूर्ण जानकारियां पढ़ें :

विजुअल बेसिक डॉट नेट | Best Info VB.NET

विजुअल स्टूडियो क्या है | Best Info Visual Studio In Hindi

Rate this post
Suraj Kushwaha
Suraj Kushwahahttp://techshindi.com
हैलो दोस्तों, मेरा नाम सूरज कुशवाहा है मै यह ब्लॉग मुख्य रूप से हिंदी में पाठकों को विभिन्न प्रकार के कंप्यूटर टेक्नोलॉजी पर आधारित दिलचस्प पाठ्य सामग्री प्रदान करने के लिए बनाया है।

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0SubscribersSubscribe
spot_img
- Advertisement -

Latest Articles