MYSTERY ZILLION တွင် English သို့မဟုတ် Unicode ဖြင့်သာ အသုံးပြုခွင့်ရှိသည်။ ဇော်ဂျီ ၊ ဧရာ စသည်တို့ကို အသုံးပြုခွင့် မရှိ။ Unicode fonts များမှာ Mon3,Yunghkio, Myanamr3 စသည်များ အသုံးပြုနိုင်သည်။ Unicode Guide ကို ဒီမှာ Download ချပါ။ Zawgyi to Unicode Converter
Don't share ebook or software if nobody request. You can find free book websites on here. We are welcome for discussion or asking question instead.

Windows Application in C#

edited February 2010 in C#
Mystery Zillion ကို သိတာတော့ အတော်ကြာပါပြီ.. ကိုယ်တိုင် အစွမ်းအစ မရှိသေးလို ့ လေ့လာသူအဖြစ်နဲ ့ပဲ ဖတ်ခဲ့ပါတယ်။ ခုတော့ C# နဲ ့ ပါတ်သတ်လို ့ ဖိုရမ်ထဲမှာ ကျနော် သိသလောက် ၀င်ဆွေးနွေးချင်ပါတယ်။ ဖိုရမ်ထဲမှာလဲ C# ကို ၀ိုင်းဆွေးနွေးထားကြတာ အားရစရာပါပဲ။ ကို sevenlamp ဆွေးနွေးထားတာတွေဆို အတော် ပြည့်စုံပါတယ်။ ကျနော်တော့ သူ ့လောက် ပြည့်စုံပါ့မလား မသိဘူး။ ကျနော့်ရဲ ့ programming မှာ သိတဲ့ Knowledge က အတော့်ကို နုပါသေးတယ်။ ဒါပေမဲ့ ကျနော့်လို လေ့လာနေဆဲသူတွေအတွက်တော့ တစုံတရာ အထောက်အကူ ဖြစ်မှာပါ။ အဲဒီ့သူတွေအတွက် ကျနော် ရှိနေပါမယ်။

programming နဲ ့ ပါတ်သတ်လို ့ကျနော် blog တစ်ခု လုပ်ထားပါတယ်။ ခု posts တွေက ကျနော့် blog က ပို ့စ်တွေ ပါ။ ကျနော့် post တွေကို user name အတူတူနဲ ့ပဲ www.myanmarfamily.org မှာလဲ ရေးနေဆဲပါ။

ကျနော်ဆွေးနွေးတဲ့အကြောင်းအရာနဲ ့ပါတ်သတ်လို ့ လိုအပ်သမျှကို သွန်သင်ပြသပေးဖို ့ မေတ္တာရပ်ခံပါတယ်။ မှားယွင်းနေတာတွေ ့ရင် သင်ကြားပြသပေးပါ။


Your Best Regards,
Green Leaf

မှတ်ချက်များ

  • edited February 2010 Registered Users
    .NET Framework
    .NET Framework ကို revolutionary platform လို ့ ပြောရမှာပဲ။ သူ ပေါ်လာတာနဲ ့ Programming လောကတစ်ခုလုံး အသစ်ပြောင်းလဲသွားတာပါပဲ။ သူ support ပေးတဲ့ programming language တွေကလဲ အများကြီးပဲလေ။ C# အပါအ၀င် C++, Visual Basic, Jscript, ပြီးရင် ဟိုးအရင် language တွေထဲက COBOL အတွက်ပါ သူ ့ကို design လုပ်ထားတာ။ တခြား language တွေလဲ ရှိပါသေးတယ်။ .NET Framework ကို Windows အတွက်သာ မဟုတ်ပဲ Linux နဲ ့ Mac အတွက် design လုပ်ထားပါတယ်။ .NET Framework က ဒီ language တွေအတွက် သူ ့တို ့ကြားထဲ language တစ်ခုနဲ ့တစ်ခု communicate လုပ်လို ့ရအောင်ပါ design လုပ်ထားပါတယ်။ ဆိုလိုတာက C# programmer တစ်ယောက်ဟာ C# code တွေကို VB code တွေအဖြစ် ပြောင်းလဲလို ့လဲ ရပါတယ်။ .NET Framework နဲ ့ ပါတ်သတ်လို ့ရှိရင် ပြောစရာတွေ အများကြီးပါပဲ။ သူနဲ ့ပါတ်သတ်တဲ့ programmers တွေရဲ ့အမြင်တွေကလဲ အမျိုးမျိုးပါပဲ။ ပြီးတော့လဲ Microsoft ကလဲ version တွေ ဆက်တိုက်ထုတ်၊ technology အသစ်အသစ်တွေ အဆက်မပြတ်ထုတ်နေတော့ မှီအောင်လိုက်ဖို ့ကတော့ အတော်မလွယ်တဲ့ ကိစ္စပါပဲ။

    FCL and CLR


    အကြမ်းဖျဉ်းပြောရရင် သူ ့မှာ အဓိကအပိုင်း (၂)ပိုင်း ပါပါတယ်။ FCL နဲ ့ CLR ဆိုပြီးတော့ပေါ့။ FCL ဆိုတာ Framework Class Library ။ သူ ့မှာ ready အသုံးပြုနိုင်တဲ့ ထောင်ပေါင်းများစွာသော classes တွေ၊ Interfaces တွေ၊ Value types တွေပါတယ်။ classes အစုအေ၀းကြီးပေါ့လေ။ FCL ထဲက Base Class Library မှာဆို တကယ့်ကို functionality ဖြစ်တဲ့ class တွေပါတယ်။ ဥပမာ System namespace တို ့၊ System.Globalization တို ့၊ System.IO တို ့စသဖြင့်ပေ့ါဗျာ။ သူတို ့က ဘာလုပ်ပေးလဲဆိုတော့ Program ရဲ ့ နေရာတော်တော်များများမှာ သူတို့ ကို သုံးလိုက်ခြင်းအားဖြင့် programmer တွေအတွက် ရေးရတာ လွယ်ကူလျင်မြန်စေတာပေါ့ဗျာ။

    နောက်တစ်ခုက CLR ။ Common Language Runtime ။ သူ ့အကြောင်း ပြောမယ်ဆိုရင် program တစ်ပုဒ် အလုပ်လုပ်ပုံကနေ စပြောမှရမယ်ထင်တယ်။

    Code တွေကို execute လုပ်တော့မယ်ဆိုရင် ပထမဆုံး အဲဒီ့ code ကို OS (operating system) နားလည်တဲ့ language တစ်ခုကို ကူးပြောင်းပေးရမယ်။

    စက်နားလည်တဲ့ native code (machine code) ပေါ့ဗျာ။ အဲဒီ့အလုပ်ကို compiler နဲ ့ interpreter တို ့က လုပ်ပါတယ်။ သို ့သော်ငြားလည်း .NET Framework အောက်မှာ အဲအလုပ်ကို အဆင့်နှစ်ဆင့်နဲ ့ လုပ်သွားပါတယ်။ အဲဒါတွေက MSIL နဲ ့ JIT ။

    MSIL and JIT


    .NET Framework library အသုံးပြုထားတဲ့ code တွေကို compile လုပ်တဲ့အခါမှာ OS ကသိတဲ့ native code အဖြစ် ချက်ချင်း မဖန်တီးနိုင်ပါဘူး။ အဲဒါအစား Microsoft Intermediate Language (MSIL) အဖြစ် compile လုပ်ပါတယ်။ ဒီ code တွေက ဘယ် Operating System နဲ ့မှ မသက်ဆိုင်ပါဘူး။ C# နဲ ့လဲ မသက်ဆိုင်ပါဘူး။ တခြား .NET languages တွေဖြစ်လဲ VB .NET ဆိုလဲ ဒီအတိုင်းပဲ ပထမဆုံး compile လုပ်ပါလိမ့်မယ်။

    ဒုတိယအဆင့်က JIT ပေါ့။ Just-In-Time Compiler ရဲ ့ အလုပ်စပါမယ်။ သူကမှ Operating System နားလည်တဲ့ native code အဖြစ်ကို compile လုပ်ပေးပါတယ်။

    အရင်တုန်းကပေါ့ဗျာ… code တွေကို compile လုပ်တဲ့အခါမှာ Operating System နဲ ့ CPU Architecture တွေကို ဦးစားပေးပြီး စဉ်းစားပြီး ရေးရတယ်။ အဲမှာ ပြဿနာရှိလာတယ်။ ဘာလဲဆိုတော့ ခင်ဗျားရဲ ့ applications တွေကို ဥပမာ Win9x နဲ ့ WinNT/2000 မှာ အတူသုံးမယ်ဆိုရင် error တက်ပြီ။ ဘာဖြစ်လို ့လဲ ဆိုတော့ အဲတုန်းက Windows က Architecture နှစ်မျိုးကွဲနေတာကိုး။ ဆိုတော့ Win9x အတွက် တစ်ခုရေး၊ WinNT/2000 အတွက် တစ်ခုရေး။ အဲလို ဖြစ်နေတာပေါ့။ အခုတော့ အဲဒါတွေ မလိုတော့ဘူး။ ဘာကြောင့်လဲဆိုတော့ JIT compiler က MSIL code ကို compile လုပ်ပေးတယ်။ MSIL code က ဘယ် Operating System ဘယ် CPU ကိုမှ မမှီခိုဘူး။ ကဲ ပြီးပြီလေ။ ဒါပဲ။ မတူညီတဲ့ architecture တွေကိုလိုက်ပြီး JIT compilers တွေများစွာရှိပါတယ်။ code တွေကို compile လုပ်တဲ့အခါ သူတို ့ဘာသာ သင့်တော်ရာ ရွေးလုပ်ကြပါလိမ့်မယ်။ နောက်ဆုံးတော့ လက်ရှိကျနော်တို ့မှာ အလုပ်တွေ တော်တော်များများ သက်သာသွားတာပေါ့ဗျာ။

    CLR ရဲ ့အဓိက အခန်းဂဏ္ဌက code ကို MSIL အဖြစ် compile လုပ်၊ ပြီးတော့ JIT compiler ကနေ native code အဖြစ် compile လုပ်ရုံတင်မဟုတ်ဘူး။ သူ ့မှာ အခြားအလုပ်တွေ အများကြီးလုပ်ပေးသေးတယ်။ managing memory, handling security, allowing cross-language debugging, and so on.( မြန်မာလို ဘယ်လိုရှင်းပြရမှန်းမသိလို ့ English လို ရေးလိုက်တာ။).NET Framework မှာ ဘာကောင်းကွက်တွေရှိလဲ ဆိုရင်တော့ ပြောရမှာ အများကြီးပါပဲ။ Garbage Collection အကြောင်း ကြည့်ရအောင်။

    Garbage Collection


    ကျနော်တို ့ program တွေရေးတဲ့အခါ program ထဲမှာ ပါတဲ့ variable တွေက memory ပေါ်မှာ သွားအလုပ်လုပ်ရတယ်။ အဲတော့ program ကြီးရင် ကြီးသလောက် memory blocks ကလဲ ကြီးလာပြီ။ ဆိုတော့ကာ တခါတရံ simple errors လေးတွေ တက်လာရင်တောင်မှ memory blocks တွေ ပျောက်ကုန်တဲ့အထိ ဖြစ်လာတယ်။ အဲဒါက ဘယ်အထိ အကျိုးသက်ရောက်လဲဆိုတော့ ခင်ဗျားရဲ ့ computer ကို shutdown ဖြစ်သည်အထိ ဖြစ်လာတယ်။ ဒီပြဿနာကို Garbage Collection ကရှင်းပေးနိုင်တယ်။ သူက ဘာလုပ်လဲဆိုတော့ ကျနော်တို ့application အတွက် အသုံးပြုထားတဲ့ memory တွေကို အဲဒီ application လက်ရှိမှာ အလုပ်မလုပ်တာကြာပြီဆိုရင် သူ ့ရဲ ့ memory တွေကို free လုပ်ပေးပါတယ်။ .NET garbage collection က ခင်ဗျားရဲ ့ ကွန်ပျူတာရဲ ့ memory ကို မကြာခဏ ရှာဖွေစစ်ဆေးပြီးတော့ မလိုအပ်တဲ့ memory တွေကို free ပေးလိုက်ပါတယ်။

    .NET Framework အကြောင်းတော့ ဒီလောက်နဲ ့ပဲ နားရအောင်။ လက်ရှိတော့ .NET Framework version 3.5 ပါ။ အခု သိပ်မကြာခင်မှာ Microsoft က အသစ်ထပ်ထုတ်မဲ့ Microsoft Visual Studio 2010 မှာ .NET Framework version 4.0 ကို ထည့်သွင်း အသုံးပြုပါလိမ့်မယ်။ လက်ရှိတော့ Microsoft Visual Studio 2010 က Beta 2 အဖြစ်ပဲ ရှိသေးတဲ့အတွက် .NET Framework လဲ version 4.0 (Beta 2) ပဲ ရှိပါသေးတယ်။ .NET Framework အကြောင်း ဆက်လက်လေ့လာချင်သေးရင်တော့ www.microsoft.com မှာ သွားရောက်လေ့လာနိုင်ပါတယ်။
  • edited February 2010 Registered Users
    Introduction to C#

    C# မွေးဖွားလာတာ အခုဆိုရင် ဆယ်စုနှစ် တစ်ခုပြည့်ခါနီးပါပြီ။ C# ဟာ 2000, July မှာ Microsoft က .NET Framework ကို ထုတ်လိုက်တဲ့အခါမှာ .NET Framework နဲ ့ တွဲလျှက်ပါလာတဲ့ Programming Language အသစ် တစ်ခုဖြစ်ပါတယ်။ .NET Framework က မွေးထုတ်လိုက်တဲ့ သားနှစ်ယောက်မှာ သူက အကြီးကောင် ဖြစ်ပါတယ်။ (ကို sevenlamp ပို ့စ်ကို လေ့လာပြီးမှ ဒီပို ့စ်ကို ရေးလိုက်ပါတယ်။ ) အငယ်ကောင်ကတော့ J# ပါ။ C# ကို C/C++ programmer အတွက် ရည်ရွယ်ပြီးတော့ J# ကို Java programmer တွေအတွက် ရည်ရွယ်ပါတယ်။ C# ကို ဒိန်းမတ်လူမျိုး Anders Hejlsberg က Design လုပ်ခဲ့တာပါ။ လက်ရှိအသုံးပြုနေတဲ့ version က C# 3.0 ။ C# 4.0 ကိုတော့ Visual Studio 2010 နဲ ့တွဲထုတ်ဖို ့အစီအစဉ် ရှိပါတယ်။

    C# ဟာ .NET CLR ထဲမှာ run ပါလိမ့်မယ်။ C နဲ ့ C++ ကို ဆက်လက်မွမ်းမံပြင်ဆင်ထားတဲ့ language တစ်ခုဖြစ်တဲ့အတွက် C++ မှာ မရနိုင်တဲ့ feature တွေ၊ မလုပ်နိုင်တဲ့အရာတွေကို C# နဲ ့လုပ်နိုင်တော့မှာပါ။ C++ ထက်စာရင် application တွေရေးတဲ့နေရာမှာ C# ကို ပိုပြီး ရိုးရှင်းလွယ်ကူပါတယ်။ ဘာလို ့လဲဆိုတော့ C# ရဲ ့syntax တွေက C++ ထက် ပို simple ဖြစ်တယ်လေ။ ပြောရရင်တော့ C# code တွေဟာ C++ code တွေထက် ပိုရှည်တာတော့ အမှန်ပါပဲ။

    အချို ့ပြောကြတာကတော့ Visual Basic ထက်ပါ ပိုကောင်းတယ်လို ့ပြောကြပါတယ်။ ဒါပေမဲ့ programmer တွေကတော့ သူ ့အကြိုက်နဲ ့သူပါပဲ။ အထက်မှာ ကျနော်ပြောသလို .NET Framework နဲ ့ ပါတ်သတ်လို ့programmer တွေရဲ ့ အမြင်တွေကလဲ တစ်ယောက်နဲ ့တစ်ယောက် မတူပါဘူး။

    Applications You can Write with C#

    .NET Framework ကတော့ application ပုံစံနဲ ့ ပါတ်သတ်လို ့ ဘယ်ဟာက ဘယ်လိုအစုထဲပါတယ် စသဖြင့် ခွဲပေးထားတာ မရှိပါဘူး။ ဒါပေမဲ့ ကျနော်တို ့ အနေနဲ ့ ခွဲကြည့်ရင်တော့ C# နဲ ့ ရေးလို ့ရနိုင်တဲ့ Application Type (၃)ခု ရှိပါတယ်။
    • Windows applications: windows applications တွေဆိုတာကတော့ Windows ကိုပဲ ကြည့်ပြီးတော့ ခံစားကြည့်လိုက်ပါ။ ဘာတွေတွေ ့မလဲဆိုတော့ buttons တွေ၊ toolbars တွေ၊ menusတွေ၊listboxes တွေ၊ checkboxs တွေ …အများကြီးပေါ့ဗျာ။ အဲဒါတွေနဲ ့ပါတ်သတ်တဲ့ controls တွေက .NET Library ထဲမှာ classes တွေ ခွဲထားပြီး အဆင်သင့် ရှိပါတယ်။ အဲဒါတွေနဲ ့ ကျနော်တို ့က Windows User Interface(UI) တွေ ဖန်တီးနိုင်တယ်ပေါ့ဗျာ။
    • Web applications : Web applications ဆိုတာကတော့ ဘယ် Web Browser နဲ ့မဆို ကြည့်လို ့ရနိုင်တဲ့ Web Pages တွေ ဖန်တီးဖို ့ပေါ့ဗျာ။ .NET Framework ကတော့ C# နဲ ့ပါတ်သတ်လို ့ ASP.NET (Active Server Pages .NET) နဲ ့ မိတ်ဆက်ပေးထားပါတယ်။ Web Forms ကို အသုံးပြုပြီးတော့ C# နဲ ့ Web Applicatoins တွေ ဖန်တီးနိုင်ပါတယ်။
    • Web Services:
    • Web Services နဲ ့ပါတ်သတ်လို ့ရှင်းပြရရင် အချိန်အများကြီး ရှင်းပြမှဖြစ်လိမ့်မယ်ထင်တယ်။ ကျနော်လဲ ကျကျနန နားမလည်သေးပါဘူး။ အကြမ်းဖျဉ်း နားလည်သလောက်ပြောရရင် Web services ဆိုတာ server-side programs တွေပေါ့ဗျာ။ ဆိုလိုတာက သူတို ့က client applications တွေကနေ ၀င်လာမဲ့ messages တွေကို နားထောင်ပြီးတော့ တိကျသေချာတဲ့ information တွေ ပြန်ပို ့နိုင်ဖို ့ပါ။ အဲဒီ့ messages တွေက same domain ထဲကလဲဖြစ်နိုင်သလို အခြား Web Services တွေကလဲ ဖြစ်နိုင်ပါတယ်။ ခင်ဗျား လိုုိအပ်တဲ့ web ပိုင်းဆိုင်ရာ services တွေကို web services တည်ထောင်ထားသူတွေ၊ developers တွေကနေ sharing and exchange ပေးပါလိမ့်မယ်။

      ကျနော်နားလည်သလောက် နဲနဲ ပြောပြရရင် computers တွေ ချိတ်ဆက်ပြီး data transfer စလုပ်ခဲ့ကြတာက 1969 မှာ computer (၄)လုံးတည်းနဲ ့ telephone မှတဆင့် ARPANET (Advanced Research Projects Agency Network) နဲ ့ ချိတ်ဆက်ခဲ့ပါတယ်။ 1976 မှာ TCP/IP protocol ကို တီထွင်ခဲ့တယ်။ ဒီ protocol လွယ်ကူအဆင်ပြေစွာ အလုပ်လုပ်ဖို ့အတွက် network programming တစ်ခုကိုလဲ တီထွင်ခဲ့ကြတယ်။ ဒီတော့ အဲဒီ့ programming နဲ ့ client တွေက server ဆီကနေ data တွေကို ရယူနိုင်တယ်။ ပြန်ပို ့နိုင်ခဲ့တယ်။ ပြီးတော့ အဲလို အလုပ်လုပ်နိုင်ဖို ့ တခြား operations တချို ့လဲ အလုပ်လုပ်နိုင်မဲ့ application တွေလဲတီထွင်လာကြတယ်။ ဥပမာ File Transfer Protocol (FTP), Talnet, Hypertext Transfer Protocol(HTTP) တို ့ပေါ့ဗျာ။ ကဲထားဗျာ။ နောက်ပြန်လှန်နေရရင် ဆုံးမှာ မဟုတ်တော့ဘူး။

      အရှင်းဆုံး ဥပမာ ပြောရရင် ခင်ဗျားက အားလပ်ရက် အနဲငယ်ရတယ်ဗျာ။ ခရီးထွက်ချင်တယ်။ travel agencyရဲ ့ အကူအညီနဲ ့ဆိုရင်တော့ ဘာမှကို မလိုဘူးပေါ့ဗျာ။ ဒါပေမဲ့ ကိုယ့်ဘာသာ Internet ကနေပဲ ရှာဖွေသွားမယ်ပေါ့။ အဲတော့ ပထမဆုံး Airline Web site ကနေ ခင်ဗျားသွားချင်တဲ့ နေရာကို flight က ဘယ်လိုအခြေအနေရှိမလဲ ကြည့်မယ်။ လိုအပ်တဲ့ data တွေ ရပြီပေါ့လေ။ ပြီးရင် ခင်ဗျားသွာချင်တဲ့နေရာမှာ တည်းခိုဖို ့ အဲဒီ့မြို ့မှာရှိတဲ့ Hotel နဲ ့ပါတ်သတ်တဲ ့ Web site အချို ့ကို ရှာဖွေ လှန်လှောရမယ်။ ကိုယ်လိုချင်တဲ့ services နဲ ့ ကိုယ်တတ်နိုင်တဲ့ price နဲ ့ရနိုင်ဖို ့ပေါ့။ ဟုတ်ပြီနော်။ တကယ်လို ့အဆင်ပြေမယ်ဆို အဲဒီ့ဟိုတယ်ကို လမ်းညွှန်မဲ့ map လေးဘာလေးလဲ တွေ ့နိုင်တယ်။ ပြီးတော့ အဲဒီ့မြို ့နဲ ့ပါတ်သတ်တဲ့ map လဲ ရကောင်းရနိုင်တယ်လေ။ ဒါမှ ခင်ဗျားအနေနဲ ့ဟိုရောက်ရင် အဆင်ပြေမှာလေ။ ပြီးတော့ ဟိုဟိုဒီဒီသွားဖို ့အတွက် taxi သို ့မဟုတ် ယာဉ်တစ်ခုခု ဘယ်မှာ ရနိုင်မလဲဆိုပြီး အဲဒါနဲ ့ပါတ်သတ်တဲ့ web site တစ်ခု ရှာဖွေရမယ်။ ကဲ အားလုံး ပြည့်စုံသွားပြီပဲ ထားလိုက်ပါတော့။

      ခု ခင်ဗျား လုပ်ထားတာတွေ ပြန်ကြည့်လိုက်ပါ။ ခင်ဗျားလိုချင်တဲ့ တိကျတဲ့ သတင်းအချက်အလက်တွေရဖို ့ Search Engine(e.g., Google, Yahoo,..) တွေ သုံး၇မယ်။

      ပြီးတော့ ဒီ web sites တွေကို ညွှန်ပြနိုင်တဲ့ အခြားသော web sites တွေကောပေါ့။ အဲဒါတွေအားလုံးဟာ Web Services ရဲ ့ အခြေခံ သဘောတရားတွေပါပဲ။
  • edited February 2010 Registered Users
    ကျနော်က developer တစ်ယောက် မဟုတ်ပါဘူး။ ကျောင်းသားတစ်ယောက်ပါ။ ကျနော် သိတာ နဲနဲလေးပဲ ရှိပါသေးတယ်။ အဲတော့ ကျနော်ပြောချင်တာက ကျနော်ဆွေးနွေးမယ်ဆိုတာကလဲ ကျနော့် scope သေးသေးလေးကနေ မြင်သလောက်ကိုပဲ ကျနော် ဆွေးနွေးနိုင်ပါမယ်။ အဲတစ်ခုတော့ ကြိုပြီး ၀န်ခံထားချင်တယ်။ လက်ရှိ ကျနော်သိနေတဲ့ programming knowledge, concept လေးတွေကို share ပေးချင်တာရယ်၊ C# ကို စိတ်၀င်စားသောသူအားလုံးအတွက်ပေါ့။ ကျနော်က အဲဒီ့လူတွေအတွက် တစ်ထောင့်တစ်နေရာက အကျိုးပြုမယ်ဆို ကျေနပ်ပါပြီ။
    C# ကို ကျနော်က ဒီလို အပို်င်း(၅)ပိုင်း ခွဲခြားထားပါတယ်။


    1. Console Programming အပိုင်း
    2. Windows Programming အပိုင်း
    3. Web Programming အပိုငး်
    4. Data Access အပိုင်း
    5. Additional Techniques အပိုင်း ဆိုပြီး ရှိပါမယ်။


    ဆိုတော့ အကြမ်းဖျဉ်း ကြည့်ရအောင်..
    Console Programming အပိုင်းမှာ ဘာတွေ လေ့လာရမလဲဆိုတော့

    Data Types
    Operator
    Statement
    String
    Array
    Struct
    Class
    Operator Overload
    delegate စတာတွေကို လေ့လာရပါမယ်။

    Web Programming အပို်င်းမှာဆို ASP .NET တွေ၊ AJAX အကြောင်းတွေ လေ့လာရမယ်။

    Data Access အပို်င်းမှာဆို File System တွေ အလုပ်လုပ်ပုံ၊ XML အကြောင်း၊ LINQ အကြောင်း၊ ADO .NET နဲ ့ SQL အကြောင်းတွေ လေ့လာရမှာ ဖြစ်ပါတယ်။

    Additional Techniques ဆိုတာကတော့ Networking အပိုင်းတွေ၊ GDI+ အကြောင်းတွေ၊ WPF လို ့ခေါ်တဲ့ Windows Presentation Foundation အကြောင်း၊ WCF လို ့ခေါ်တဲ့ Windows Communication Foundation ၊ Windows Workflow Foundation အကြောင်း စတာတွေ လေ့လာရမှာပေါ့လေ။

    Windows Programming
    လွန်ခဲ့တဲ့ နှစ် အနည်းငယ်ကတော့ Windows Programming ဘက်မှာ Visual Basic က တော်တော် နေရာရတယ်ဗျ။ C# မပေါ်ခင်ကပေါ့ဗျာ။ သူက Forms Designer ကို အသားပေးထားတာ။ ဒီလိုုပေါ့ဗျာ။ ခင်ဗျားက Application တစ်ခု ထုတ်ချင်တယ်။ ဒီတော့ ဘာလုပ်ရမလဲ။ Form လေးတစ်ခုဆွဲ၊ အဲဒီ့ထဲကို Toolbox ကနေ controls တွေ drag and drop လုပ်။ ပြီးတော့ အဲဒီ့ Controls တွေကို handle လုပ်ဖို ့အတွက် double-click လုပ်ပြီး အဲဒီ့ Controls အတွက် handler ကို add လုပ်လိုက်။ အဲထဲမှာ ကိုယ်လိုချင်တဲ့ ပုံစံလေးရအောင် code လေးတွေ ရေးလိုက်ယုံပဲ။ ကဲ မလွယ်ဘူးလား။ ခင်ဗျား Windows မှာပါတဲ့ Paint မှာ ပုံတွေ ဘာတွေ ဆွဲဖူးတယ်မို ့လား။ ဘေးမှာ Toolbox လေးနဲ ့လေ။ အင်း Windows Programming ဆိုတာ အဲလိုပဲဗျာ။ :D (နောက်တာနော်) ။ ကဲ ဘာပဲပြောပြော ပြောလောက်အောင် မခက်ဘူးဆို ခင်ဗျားလဲ try ကြည့်မှာပေါ့။ ဟုတ်တယ်မို ့လား။အဲဒါနဲ ့ Microsoft က .NET Framework ထုတ်လိုက်တဲ့အချိန်မှာ C# ဆိုတဲ့ Programming အသစ်ထွက်လာတယ်။ သူက ခုန ကျနော်ပြောတဲ့ VB နဲ ့ရေးတဲ့ Windows Application ပိုင်းမှာ VB ထက်သာတဲ့ features တွေ ရှိတယ်ပေ့ါလေ။ ဒါကတော့ ပြောကြတာပေါ့လေ။ ဟုတ် မဟုတ်တော့ ကျနော်လဲ သေချာမသိပါဘူး။ ဒါပေမဲ့ တစ်ခြား Programming language တွေရဲ ့ အားသာချက်၊ အားနည်းချက်တွေကို လေ့လာပြီးမှ ထုတ်ထားတာဆိုတော့ သူကတော့ ပိုပြီး powerful ဖြစ်မှာ အမှန်ပဲလို ့ကျနော်တော့ ယူဆတယ်။အဲတော့ ကျနော်က ဘာလုပ်ပေးမလဲဆိုတော့ အဲဒီ့ windows application အပိုင်းမှာ အသုံးပြုရမဲ့ Controls တွေကို ဘယ်လို create လုပ်မလဲ။ ဘယ်လို အသုံးပြုရမလဲ။ ဘယ်လို handle လုပ်မလဲ ဆိုတာကို ဆွေးနွေးပေးမှာပါ။ လက်ရှိတော့ ကျနော် အဲဒီ့ Controls တွေကို focus ထားပြီး ဆွေးနွေးပေးပါမယ်။ တခြားဟာတွေကိုလဲ အလျဉ်းသင့်သလို ဆွေးနွေးသွားပါမယ်။ တစ်ခုတော့ ရှိတယ်။ ကျနော် ဆွေးနွေးပေးမဲ့အပို်င်းက Windows applications ဖြစ်တဲ့အတွက် C# Console Programming အပိုင်းတော့ တတ်ပြီးသား ဖြစ်မှ ရပါမယ်။ C# ကို အနဲငယ် လေ့လာပြီးသား ဖြစ်မှ ရပါမယ်။ ဘာလို ့ဆိုတော့ လက်ရှိ ကျနော် C# ရဲ ့ structure တွေ၊ keywords တွေကို ရှင်းပြမှာ မဟုတ်လို ့ပါ။ နောက် အချိန်ရရင်တော့ Console အပိုင်းကို ပြန်ရေးပေးပါမယ်။ လက်ရှိတော့ ဒီ posts ကို လေ့လာတဲ့သူတွေကို Console အပိုင်း နားလည်ပြီးသားလို ့ ကျနော်မှတ်ယူပြီး ရှင်းပြသွားမှာ ဖြစ်ပါတယ်။


    နောက်ဆုံး ပြောချင်တာလေး တစ်ခုရှိပါတယ်။ အဲဒါက ဘာလဲဆိုတော့ တချို ့တွေ နားလည်မှုလွဲပြီး ရေလိုက်လွဲမှာကို ကြောက်တာပါပဲ။ ရှင်းရှင်းပြောရရင် ကျနော်က ခင်ဗျားတို ့ကို Visual Studio ရဲ ့ usage ကို ရှင်းပြသလို ဖြစ်နေပါလိမ့်မယ်။ ဘာလို ့ဆိုတော့ C# ရဲ ့ theory တွေ၊ logic , concept, thinking တွေကို ကျကျနန ရှင်းမပြနိုင်ပါဘူး။ ဒါ ကျနော် တစ်ခါတည်း ၀န်ခံထားတာပါ။ ကျနော်က developer တစ်ယောက်လို၊ ဆရာတစ်ယောက်လို ခင်ဗျားတို ့ကို မရှင်းပြနိုင်ပါဘူး။ ကျနော့်မှာ အဲ အရည်အချင်း မရှိသေးပါဘူး။ C# မှာ ဒါတွေရှိတယ်။ ဒီလို create လုပ်လို ့ ရတယ်ဆိုတာပဲ ပြောပြနိုင်မှာပါ။ အဲတော့ ဘာဖြစ်သွားနိုင်လဲဆိုတော့ တချို ့တွေ ရေလိုက်လွဲပြီး IDE user တွေ ဖြစ်သွားနိုင်ပါတယ်။ အဲတော့ အဲလို မဖြစ်သွားအောင် ကိုယ့်ကိုကိုယ်လဲ လုပ်မှ ရပါလိမ့်မယ်။ ဒီတော့ ဘာလုပ်ရမလဲဆိုတော့ www.msdn.com ဖတ်ပါ။ Ebook တွေလဲ ဖတ်ပါ။ တခြား programming websites တွေလဲ အများကြီး ရှိပါတယ်။ မသိရင် အနီးအနားမေးပါ။ မရှိရင် Internet က forum တွေမှာ ၀င်မေးမြန်းပါ။ အဲကနေ သူ ့ရဲ ့ technology ကို နားလည်အောင် ကိုယ့်ဘာသာ ကြိုးစားပါလို ့ ကျနော် တိုက်တွန်းချင်ပါတယ်။

    Thanks for reading my posts !!
    See u around, buddy !!
  • edited February 2010 Registered Users
    Message Boxes

    Message Box ဆိုတာ dialog box တစ်ခုဖြစ်ပါတယ်။ သူက user တွေ အတွက် လိုအပ်တဲ့ information အချို ့ကို ပြသပေးပါတယ်။ user အနေနဲ ့တော့ message box နဲ ့ ပါတ်သတ်ပြီး ဘာမှ ပြုပြင်ပြောင်းလဲလို ့မရပါဘူး။ .NET Framework က message box နဲ ့ ပါတ်သတ်ပြီး MessageBox ဆိုတဲ့ predefined class ရှိပါတယ်။

    The Message of a Message Box

    .NET Framework က Message Box တွေ အလွယ်တကူ ဖန်တီးနိုင်အောင်လို ့ MessageBox class ကို predefined လုပ်ပြီးသားပါ။ Messagebox ကို display လုပ်ချင်ရင်တော့ Show() function ကို ယူသုံးရုံပါပဲ။ အောက်က ဥပမာကို ကြည့်ပါ။ ပထမဆုံး MS visual studio ကိုဖွင့်လိုက်ပါ။ ကျနော် အသုံးပြုတာကတော့ MS Visual Studio 2008 Team Suite ပါ။ MS Visual Studio 2008 version တစ်ခုခုသုံးရင် ကျနော်ပြမဲ့ samples တွေနဲ ့ အဆင်ပြေပါတယ်။ ပထမဆုံး Visual Studio ဖွင့်လိုက်ပါ။ File -> New -> Project (သို ့) Ctrl+Shift+N ကို နှိပ်လို်က်ပါ။ Console Application ကို ရွေးလိုက်ပါ။ Name နဲ ့ location ကို အဆင်ပြေသလို ပြုပြင်လိုက်။ ပြီးရင် အထဲမှာပါတဲ့ default ရေးပေးထားတဲ့ဟာအာလုံး delete ပေးလိုက်ပါ။ ပြီးရင် အောက်က code ကို ရိုက်ထည့်လိုက်ပါ။
    using System;
    using System.Windows.Forms;
    
    public class Program
    {
         public static void Main()
         {
             MessageBox.Show("Welcome to the C# world!");
         }
    }
    
    ပြီးရင် F6 (သို ့) Build -> Build Solution ကို click။ အဲဒါက Build and compile ဖြစ်ပါတယ်။ ပြီးရင် F5 (သိို ့) Debug -> Start Debugging (သို ့) Ctrl+F5 (သို ့) Debug -> Start without Debugging ကို click ပါ။ program ကို run ခြင်းဖြစ်ပါတယ်။

    ရှင်းလင်းချက်

    MessageBox class က System.Windows.Forms class ကနေ Inherited ဆင်းပါတယ်။ ဒါပေမဲ့ ကျနော်တို့ ရွေးလိုက်တဲ့ Console Application မှာ System.Windows.Forms မပါပါဘူး။ အဲဒီတော့ ဘယ်လိုလုပ်မလဲ ? Visual Studio ရဲ ့ ညာဘက် က Solution Explorer ကို ဖွင့်လိုက်ပါ။ မပေါ်ရင် View -> Solution Explorer ကို click ပါ။ Solution Explorer -> References (right click) -> Add Reference ကို click ပါ။ ပြီးရင် ပေါ်လာတဲ့ Add Reference ထဲက .NET tab ထဲမှာ System.Windows.Forms ကို ရွေးပြီး click ပါ။

    နောက်ဆုံး Ctrl + F5 ကို နှိပ်ပြီးရင် အောက်က ပုံအတိုင်း ပေါ်လာပါလိမ့်မယ်။

    messagebox1.jpg

    နောက်ကမြင်နေရတဲ့ black screen နဲ ့ command prompt ကြီးကို မမြင်ချင်ရင် Solution Explorer -> Properties ကို double click ပေးလိုက်ပါ။ ပေါ်လာတဲ့ page မှာ Application - > Output type မှာ လက်ရှိ ရှိနေတဲ့ Console Application ဆိုတဲ ့နေရာမှာ down arrow လေးနဲ ့Windows Application ဆိုတာကို ပေးလိုက်ပါ။ ပြီးရင် ပြန် run (Ctrl+F5) ကြည့်ပါ။ အောက်က ပုံအတိုင်း ပေါ်နေပါလိမ့်မယ်။

    messagebox11k.png



    The Caption of a Message Box


    Message Box ကို ထပ်မံ modify လုပ်လို ့ရပါသေးတယ်။ MessageBox.Show() method(function) ရဲ ့ parameters တွေထဲမှာ ပထမဆုံး argument က အထက်က ဥပမာထဲက အတိုင်း user အတွက် instruction/information ပြထားတဲ့ string data_type (Welcome to the C# world!) ဖြစ်ပါတယ်။ MessageBox.Show() method ရဲ ့ parameters ထဲက ဒုတိယ argument က caption ဖြစ်ပါတယ်။ caption ဆိုတာကတော့ အလွယ်ပြောရရင် Message Box ရဲ ့ title ပေါ့လေ။ Message Box ရဲ ့ bar ပေါ်မှာ display လုပ်ပါလိမ့်မယ်။ ကဲ ကြည့်ရအောင်။

    using System;
    using System.Windows.Forms;
    
    public class Program
    {
         public static void Main()
         {
              MessageBox.Show("Moe, Will you marry me?", "Proposal");
         }
    }
    
    Ctrl+F5 ......အောက်ကပုံအတိုင်း ပေါ်လာပါမယ်။

    messagebox12.jpg


    The Buttons of a Message Box


    Message Box ထဲမှာ Buttons တွေထည့်ဖို ့အတွက် MessageBox.Show() method ကနေ ပေးထားပါသေးတယ်။ ဒါက MessageBox.Show() method ရဲ ့ တတိယမြောက် argument ပါ။ MessageBox Buttons Enumeration ကနေ ဘယ်လို buttons တွေ ဘာလဲဆိုတာကိုတော့ အောက်က ပုံကို ကြည့်ပြီး လေ့လာလိုက်ပါ။

    messagebox13.jpg

    ပုံကြည့်ပြီးရင်တော့ ရှင်းမယ်ထင်ပါတယ်။ program ထဲမှာ ပုံရဲ ့ ဘယ်ဘက်မှာ ပြထားတဲ့ keywords တွေသုံးလိုက်ရင် ညာဘက်မှာ ပြထားတဲ့ buttons တွေအတိုင်း message box မှာ ပါလာပါလ်ိမ့်မယ်။ သူ ့ရဲ ့ syntax က ဥပမာ MessageBoxButtons.AbortRetryIgnore သုံးလိုက်ရင် Message Box အောက်ခြေမှာ Abort, Retry, Ignore buttons သုံးခု ပါလာပါလိမ့်မယ်။ ပိုရှင်းသွားအောင် အောက်က program ကို ပြင်ရေးကြည့်လိုက်ပါ။
    using System;
    using System.Windows.Forms;
    
    public class Program
    {
         public static void Main()
         {
              MessageBox.Show("Moe, Will you marry me?", "Proposal", MessageBoxButtons.YesNo);
         }
    }
    
    အဲဒါဆိုရင် အောက်ကပုံအတိုင်း ပေါ်လာပါလိမ့်မယ်။

    messagebox14.jpg

    The Icon of a Message Box

    Icon ဆိုတဲ့အတိုင်း Message Box ထဲမှာ Icon ပုံလေးတွေ ထည့်ပေးဖို ့ပါ။ User အနေနဲ ့ Message မဖတ်ခင် Icon ပုံကို ကြည့်လိုက်တာနဲ ့ သာမန် အားဖြင့် အရေးကြီးမကြီး ခွဲခြားနိုင်တာပေါ့ဗျာ။ ဟုတ်ဘူးလား။ Icon ဟာ MessageBox.Show() method ရဲ ့ စတုတ္ထမြောက် argument ပါ။ syntax ကတော့ ဥပမာ MessageBoxIcon.Information ဆိုရင် messagebox15.jpg ဒီလိုပုံလေး Message Box ထဲမှာ ပါလာပါလိမ့်မယ်။ MessageBoxIcon ထဲမှာ ပါတဲ့ Enumeration အရတော့ ဒီဟာတွေ အသုံးပြုလို ့ရပါတယ်။

    None, Asterisk, Error, Information, Exclamation, Hand, Information, Question, Stop, Warning တို ့ ဖြစ်ပါတယ်။ ပုံနဲ ့တော့ မဖေါ်ပြတော့ဘူးဗျာ။ ဆွဲနေရင် ကြာနေမှာစိုးလို ့။ စာဖတ်ရင်လဲ နားလည်နေတာပဲကို။ ဟုတ်တယ်မို ့လား။ ကဲ အဲတော့ အောက်က code ကို Visual Studio မှာ ထပ်ထည့် run ကြည့်ပါအုံး။
    using System;
    using System.Windows.Forms;
    
    public class Program
    {
         public static void Main()
         {
              MessageBox.Show("Moe, Will you marry me?", "Proposal",MessageBoxButtons.YesNo, 
              MessageBoxIcon.Question);
         }
    }
    
    အဲဒါဆိုရင် အောက်ကပုံလေးအတိုင်း ပေါ်လာပါလိမ့်မယ်။ လေ့လာကြည့်လိုက်ပါအုံး။

    messagebox16.jpg

    /* Message Box နဲ ့ ပါတ်သတ်လို ့ မပြီးသေးဘူးဗျာ.. ဒါပေမဲ့ post တစ်ခုမှာ ပုံပေါင်း (၉) ပုံပဲ ထည့်ရမယ်လို ့ ပြောတယ်ဗျ..ကျနော်က ပုံပေါင်း (၁၅) ပုံ ရှိတယ်ဗျ.. ဒါကြောင့် နောက်ပို ့စ် မှာ ဆက်ဖတ်ပါ။ */


    Thanks for reading my post!
    OK!
    See u Around, buddy !!
  • edited February 2010 Registered Users
    The Default Button of a Message Box

    Message Box ထဲမှာ Buttons တွေ တစ်ခုနဲ ့အထက် ပါလာရင် ဘယ် button က default အနေနဲ ့ ရှိမလဲဆိုတာ OS ကို ရွေးချယ်ခိုင်းထားခြင်း ဖြစ်ပါတယ်။ default button က တခြား button တွေထက် high-lighted ဖြစ်နေပြီး ထင်ရှားနေမှာ ဖြစ်ပါတယ်။ user အနေနဲ ့ mouse နဲ ့ ရွေးချယ်မှု မရှိပဲ Enter (return) key ကိုသာ နှိပ်လိုက်မယ်ဆိုရင် ကျနော်တို ့ Default ပေးထားတဲ့ button သာ အလုပ်လုပ်မှာ ဖြစ်ပါတယ်။

    အဲဒီ့မှာ အခြေအနေ (၃)ခု ရှိပါတယ်။ MessageBoxDefaultButton.Button1 ဆိုရင် ဘယ်အစွန်ဆုံး button ရွေးချယ်ပါလိမ့်မယ်။ ဒီလိုလေးပါ။
    messagebox17.jpg

    ဒုတိယ အခြေအနေက MessageBoxDefaultButton.Button2 ဆိုရင် အကယ််၍ button က (၃) ဆိုရင် အလယ်က button ကို ရွေးပါလိမ့်မယ်။ အကယ်၍ button က (၂) ခုတည်းဆို ညာဘက်က button ကို အလုပ်လုပ်ပါလိမ့်မယ်။ ဒီလိုလေးပါ။
    messagebox18.png

    တတိ်ယအခြေအနေက MessageBoxDefaultButton.Button3 ဆိုရင် ညာဘက် Button ကို အလုပ်လုပ်ပါလိမ့်မယ်။ အောက်မှာ ကြည့်ပါ။
    messagebox19.png

    အောက်က code ကို လေ့လာကြည့်လိုက်ပါအုံး။

    using System;
    using System.Windows.Forms;
    
    public class Program
    {
         public static void Main()
         {
              MessageBox.Show("Moe, Will you marry me?", "Proposal",MessageBoxButtons.YesNo, 
              MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
         }
    }
    
    ဒါဆိုရင် ဒီလိုလေး ထွက်လာပါလိမ့်မယ်။ အောက်မှာ ကြည့်ပါ။
    messagebox21.jpg

    Sample
    using System;
    using System.Windows.Forms;
    
    public class Program
    {
         public static void Main()
         {
              DialogResult result = MessageBox.Show("Moe, Will you marry me?", "Proposal",
              MessageBoxButtons.YesNo, MessageBoxIcon.Question, 
              MessageBoxDefaultButton.Button1);
    
              if (result == DialogResult.Yes)
                   MessageBox.Show("Oh! Yeah! I'm the happiest man in the world!" +
                   "\nYou are my angel!");
    
             else
                   MessageBox.Show("Are you sure, Moe?" +
                   "\nI can't live without you, you know?" +
                   "\nCan I have an another chance?");
         }
    }
    
    Ctrl + F5.... ဒါဆိုရင် အောက်ကပုံလေးအတိုငး် output ထွက်လာပါမယ်။
    messagebox22.jpg

    အကယ်၍သာ mouse နဲ ့ Yes button ကို click ပေးလိုက်ရင် ဖြစ်ဖြစ်၊ Keyboard ကနေ Enter(return) key
    ကိုသာ နှိပ်လိုက်မယ်ဆိုရင် Yes button နဲ ့ပါတ်သတ်တဲ့ နောက်ထပ် အလုပ်တစ်ခုကို ဆက်လုပ်သွားပါမယ်။
    အောက်က output အတိုင်းပါပဲ။
    messagebox23.jpg

    အကယ်၍သာ No ကိုသာ ရွေးချယ်ခဲ့မယ်ဆိုရင်တော့ အောက်ကအတိုင်းပါပဲဗျာ။ (၀မ်းနည်းစရာ ကောင်းပဗျာ :)
    messagebox24.jpg

    ဒီလောက်ဆို MessageBox နဲ ့ ပါတ်သတ်လို ့ ပြည့်စုံပါပြီ။ Message Boxes တွေကို လိုအပ်တဲ့နေရာတွေမှာ လိုအပ်သလို အသုံးချပါ။ ကျနော်တို ့အသုံးပြုနေတဲ့ windows မှာလဲ Message Boxes တွေကို မကြာခဏ မြင်ဖူးနေကြတာ သတိထားမိကြမှာပါ။


    Thanks for reading my post!
    OK!
    See u Around, buddy !!
  • edited February 2010 Registered Users
    Forms

    Form ဆိုတာကတော့ Application တစ်ခုရဲ ့ UI (user interface) အတွက် ပြုလုပ်ထားတဲ့ window တစ်ခု ဒါမှမဟုတ် dialog box တစ်ခုပဲ ဖြစ်ပါတယ်။ ဆိုလိုတာက user တွေ application တစ်ခုကို အသုံးပြုမယ်ဆို ပထမဆုံး စမြင်ရမှာကတော့ form ပုံစံ window တစ်ခုပဲ ဖြစ်ပါတယ်။ အဲဒီ့ form ပေါ်မှာမှ ကျနော်တို ့က Buttons တွေ၊ Textbox, label, combo box, radio buttons စတဲ့ controls တွေ ထပ်ထည့်ကြမှာပါ။ ဥပမာ လက်ရှိ ခင်ဗျား အသုံးပြုနေတဲ့ browser မှာပဲ ကြည့်ပါ။ ညာဘက် အပေါ်ထောင့်မှာဆို minimized box, maximized box, close box (၃) ခုပါမယ်။ title bar ထောင့်မှာဆို ..ဥပမာ Mozilla firefox ဆို သူ ့ရဲ ့ ပုံလေးပါတယ်။ ဘယ်ဘက် အပေါ်ဆုံးထောင့်မှာ ...တွေ ့တယ်မို ့လား။ ပြီးရင် Title bar မှာ သူ ့နဲ ့ ပါသတ်တဲ့ text တွေ ပါတယ်။ ပြီးရင် menu bar ပါမယ်။ အဲဒီ့ menu bar ထဲမှာမှ File, Edit, View, History, Boookmarks, Tools, Help စသည်ဖြင့် ဟုတ်တယ်မို ့လား.. အောက်မှာဆို Toolbars တွေပါမယ်။ အဲဒါတွေအားလုံးရဲ ့ နောက်ခံ background က form ကြီးပဲလေ။ အဲဒီ့တော့ ကျနော်တို ့ ပထမဆုံး စသိရမှာက အဲဒီ့ Form ပဲ။

    Form class က .NET Framework class library ထဲမှာ ပါတယ်။
    Namespace က System.Windows.Forms

    Form written by Windows Forms Applications

    Open Microsoft Visual Studio.
    File -> New -> Project (or) Ctrl+Shift+N.
    Choose 'Windows Forms Application' from Templates.
    Rename and change the location if you want.
    Click OK.

    အဲဒါဆို ဒီလိုမျိုးလေး ပေါ်လာပါလိမ့်မယ်။ အောက်မှာ ကြည့်ပါ။
    form11s.jpg

    1) အထဲမှာ ပေါ်နေတဲ့ Fom1 ကို right click -> properties ကိုသွားပါ။ Text property မှာ ရှိနေတဲ့ Form1 နေရာမှာ My First Application လို ့ ပြင်ရေးပါ။
    2) Toolbox ကနေ button ကို double click ပေးလိုက်ပါ။ button -> right click -> properties ကို သွားပါ။ Text property မှာ Click Me လို ့ပြင်ရေးပါ။
    3) အဲဒီ့ Click Me ဆိုတဲ့ button ကို double click ပေးလိုက်ပါ။ အဲဒါဆိုရင် Code Editor ထဲ ရောက်သွားပါမယ်။ အထက်က ဟာတွေက Design Editor ထဲမှာ ဆွဲနေတာတွေပါ။ ခု code editor ထဲမှာ အောက်ကအတိုင်း ရေးလိုက်ပါ။
    private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show("With a button, My First Application have been created.");
            }
    
    ရပြီဆိုရင် Menu bar က Build -> Build Solution ကို Click ပါ။ ဒါမှမဟုတ် F6 ကို နှိပ်ပါ။ ပြီးရင် Menu bar ကပဲ Debug -> Start without debugging (သို ့) Ctrl+F5 ကို နှိပ်ပါ။ အဲဒါဆိုရင် အောက်ကပုံအတိုင်း ထွက်လာပါလိမ့်မယ်။ ကြည့်ကြည့်ပါ။

    form12.jpg

    ရှင်းလင်းချက်
    ဆိုတော့.. အဲဒါက ခင်ဗျားရဲ ့ form ကို အခြေခံထားတဲ့ ပထမဆုံး application တစ်ခု အောင်အောင်မြင်မြင် ထွက်လာပြီ။ ပျော်စရာကောင်းရဲ ့လား C# ရဲ့ Windows Forms Application က ။ အဲထဲမှာ ကိုယ်လိုချင်တဲ့ ပုံစံ ကို design editor ထဲမှာဆွဲ။ ပြီးရင် controls ကို property ကိုယ်လိုသလိုပြုပြင်။ ပြီးရင် controls တွေကို double click ပေးပြီး ကိုယ်လိုချင်တဲ့ code တွေရေး ။ နောက်ဆုံးတော့ ကိုယ်ရေးထားတာလေး ကြည့်ပြီး ကိုယ့်ဘာသာ သဘောကျလာလိမ့်မယ်။

    ကဲ အထက်က ဟာကိုပဲ Console Application နဲ ့ပြန်ရေးရအောင်။ နောက်ပိုင်း လိုအပ်သလောက်ထိ ကျနော် Console Application နဲ ့ပဲ အားလုံးကို ရှင်းပြပေးသွားပါမယ်။


    Form written by Console Application

    File -> New -> Project (or) Ctrl+Shift+N.
    Choose 'Console Application' from Templates.
    Rename and change the location if you want.
    Click OK.

    Editor ထဲမှာ သူ default ရေးပေးထားတဲ့ဟာတွေ အကုန်လုံး ဖျက်လို်က်ပါ။ ကျနော်တို ့ကိုယ့်ဘာသာပဲ ရေးကြတာပေါ့။ ကဲ ရေးကြည့်ရအောင်။
    using System;
    using System.Windows.Forms;
    using System.Drawing;
    
    public class MyFirstApp : Form
    {
        public MyFirstApp()
        {
            this.button1 = new Button();
            this.button1.Location = new Point(146, 197);
            this.button1.Size = new Size(75, 23);
            this.button1.Text = "Click Me";
            this.button1.Click += new EventHandler(this.button1_Click);
    
            Text = "My First Application";
            this.ClientSize = new Size(292, 268);
            this.Controls.Add(this.button1);
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("With a button, My First Application have been created.");
        }
    
        public static void Main()
        {
            Application.Run(new MyFirstApp());
        }
    
        private System.Windows.Forms.Button button1;
    }
    

    How to works

    1) program ရဲ ့ ပထမဆုံးအကြောင်းက using namespace ကို ကြေငြာပါမယ်။ C++ မှာ
    #include <iostream> သုံးသလိုပေ့ါဗျာ။ C# မှာတော့ class အားလုံးဟာ using System ကပဲ Inherited လုပ်လာတာချည်းပါပဲ။ အဲတော့ သူက မပါမဖြစ်။
    2) using System.Windows.Forms က ကျနော်တို ့Form ဆွဲဖို ့အတွက် ခေါ်ထားတာ ဖြစ်ပါတယ်။ သူက Windows Forms Application မှာ auto - default ပါပေမဲ့ အခု Console Application နဲ ့ရေးတဲ့အခါကျတော့ မပါပြန်ဘူး။ အဲတော့ program editor ရဲ ့ ညာဘက်က solution explorer ကို ဖွင့်၊ References -> right click -> Add reference...။ ပေါ်လာတဲ့ dialog box ထဲက .NET tag ထဲမှာ System.Windows.Forms ကို လိုက်ရှာ။ Click OK.
    3) using System.Drawing ။ သူက ကျနော်တို ့ဆွဲတဲ့ form နဲ ့ button နဲ ့ပါတ်သတ်တဲ့ location နေရာချမှုတွေ၊ fore and background color တွေ စသည်ဖြင့် နေရာတွေမှာ အသုံးပြုုနိုင်အောင်ပါ။ သူလဲ အထက်က using System.Windows.Forms လိုပဲ။ default အနေနဲ ့ မပါဘူး။ အထက်ကအတိုင်း လိုက်လုပ်လိုက်။ ဒီ using namespace သုံးခုလုံးက လက်ရှိမှာ မပါမဖြစ်ပါ။
    4)
    public class MyFirstApp : Form
    {
    }
    
    C# က class - based ပါ။ အားလုံးကို class တွေနဲ ့ပဲ အလုပ်လုပ်ပါတယ်။ class name ကို MyFirstApp လို ့ အမည်ပေးထားပြီးတော့ Form ဆွဲဖို ့ Form Class ကနေ colon (:) နဲ ့ Inherited ဆင်းလိုက်ပါတယ်။
    5)
    public MyFirstApp()
    {
    }
    
    ဒီ function က MyFirstApp Class ရဲ ့ Constructor function ပါ။ ဒါကြောင့် class name နဲ ့ အတူတူ ဖြစ်ရပါတယ်။ ဒီထဲမှာ Form နဲ ့ ပါတ်သတ်တဲ့ လိုချင်တဲ့ အချက်အလက်တွေ ပါအောင် ရေးရပါတယ်။ form ထဲမှာ button လေး ထည့်ဖို ့အတွက် ဟိုးအောက်ဆုံးအကြောင်းမှာ.. တွေ ့တယ်မို ့လား။

    private System.Windows.Forms.Button button1;

    အင်း ကြိုပြီးတော့ declaration လုပ်ထားပါတယ်။ Button class ကလဲ System.Windows.Forms ထဲကနေပဲ inherited ဆငး်မှန်း သိအောင်လို ့ရေးပေးထားတာပါ။

    private Button button1; လို ့ရေးလိုက်လဲ ရပါတယ်။

    constructor ထဲမှာ button နဲ ့ပါတ်သတ်တဲ့ location, size, ပေါ်မဲ့စာသား (Text) စသည်ဖြင့် ထည့်။ ပြီးတော့ button ကို click ရင် ဘာလုပ်မှာလဲ ??

    this.button1.Click += new EventHandler(this.button1_Click);

    EventHandler ကနေ button ကို click လိုက်ရင် ဘာဖြစ်မလဲဆိုတဲ့ event ကို handle လုပ်ဖို ့အတွက် ဖြစ်ပါတယ်။ ပြီးတော့မှ button1_Click ကို function အနေနဲ ့သပ်သပ်ထုတ်ရေး။
    6)
    this.Controls.Add(this.button1);
    အဲဒါက ဒီ button ကို form ပေါ်မှာ Add ပေးလိုက်တာပါပဲ။
    7)
    နောက်ဆုံး Main() ကနေ MyFirstApp() function ကို Application.Run() နဲ ့ ဆွဲခေါ်လိုက်တာပါပဲ။
    8) Ctrl+F5 နဲ ့run လိုက်ရင် ပထမက နောက်မှာ cmd (command prompt) နဲ ့ကော နှစ်ခု ပေါ်နေမှာပါ။
    အဲဒါကြီးမပေါ်ချင်ရင် solution explorer -> properties -> output type မှာ console application နေရာမှာ windows application ကို ရွေးပေးလိုက်ပေါ့ဗျာ။



    ကဲ အားလုံးပဲ အဆင်ပြေမယ်လို ့ မျှော်လင့်ပါတယ်။

    Thanks for reading my posts!!
    See u around, buddy !!
    Have a nice day !!
  • edited February 2010 Registered Users
    Labels

    Label ဆိုတာ User တွေကို လမ်းညွှန်ပြပေးမဲ့ control တစ်ခုပါပဲ။ သူက static text တွေနဲ ့ ရေးထားတဲ့အတွက် user တွေကတော့ ပြုပြင်ပြောငး်လဲလို ့မရပါဘူး။ ဖတ်ဖို ့အတွက်ပါပဲ။ user အတွက် လို်အပ်တဲ့ information တွေကို ပြသပေးတဲ့ control တစ်ခုပါ။ အောက်ကပုံကို ကြည့်လိုက်ရင် နားလည်သွားပါလိမ့်မယ်။
    label11.jpg

    အဲမှာ အပေါ်ဆုံးက ရေးထားတဲ့ Please fill up ...... ဘာညာ သာရကာနဲ ့ ဘယ်ဘက်မှာ ရေးထားတဲ့ first name, last name, စသဖြင့် တွေ ့ရတဲ့ အရာအားလုံးဟာ Label Control ကို အသုံးပြုထားတာချည်းပါပဲ။ ညာဘက်က user ဖြည့်မဲ့ first name , last name, male, female, စသဖြင့် ဟာတွေကိုတော့ Textbox, Combo Box, စတာတွေ အသုံးပြုရမှာပါ။ နောက်ကျရင် အဲဒါတွေနဲ ့လဲ ထိတွေ ့ရပါလိမ့်မယ်။ ကဲ အဲဒါဆို Label ဆိုတာ ဘာလဲဆိုတော့ နားလည်သွားပြီပေါ့။ ဟုတ်ရဲ ့လား။ ဒါဆို sample တစ်ခုလောက် ဆွဲကြည့်ရအောင်။

    Sample
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class LabelTextChange : Form
    {
        Label lblEcho;
        TextBox txt;
    
        public LabelTextChange()
        {
            Text = "Sample";
            Size = new Size(300, 250);
    
            lblEcho = new Label();
            lblEcho.Parent = this;
            lblEcho.Text = "test";
            lblEcho.Location = new Point(0, 0);
            lblEcho.AutoSize = true;
            lblEcho.BorderStyle = BorderStyle.Fixed3D;
            int y = lblEcho.Height + 10;
    
            Image img = Image.FromFile("ball_blue_1.png");
            Label lblImage = new Label();
            lblImage.Parent = this;
            lblImage.Location = new Point(250, 0);
            lblImage.Image = img;
            lblImage.BorderStyle = BorderStyle.None;
            lblImage.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            lblImage.Size = new Size(img.Width, img.Height);
    
            Label lblCaption = new Label();
            lblCaption.Parent = this;
            lblCaption.Text = "&Enter Text Here:";
            lblCaption.Size = new Size(lblCaption.PreferredWidth, lblCaption.PreferredHeight);
            lblCaption.Location = new Point(0, y);
            lblCaption.BorderStyle = BorderStyle.FixedSingle;
    
            txt = new TextBox();
            txt.Parent = this;
            txt.Size = new Size(100, 23);
            txt.Location = new Point(lblCaption.Width + 5, y);
            txt.TextChanged += new System.EventHandler(txt_TextChanged);
    
        }
    
        static void Main()
        {
            Application.Run(new LabelTextChange());
        }
    
        private void txt_TextChanged(object sender, EventArgs e)
        {
            lblEcho.Text = txt.Text;
        }
    }
    
    Output
    label121.jpg

    TextBox ထဲမှာ ရိုက်ပြီး စမ်းကြည့်နိုင်ပါတယ်။ ဥပမာ ကျနော်က ဒီလို ရေးလို်က်ပါတယ်။
    label131.jpg

    How To Works
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    previous post မှာ အဲဒါနဲ ့ပါတ်သတ်ပြီး ရှင်းပြပြီးပါပြီ။ ကျနော်တို ့ class name ကို LabelTextChange လို့့ အမည်ပေးလိုက်ပါတယ်။ Form ထဲမှာ Label (၃) ခု ပါတာ တွေ ့မယ်ထင်ပါတယ်။ test လို ့ ရေးထားတဲ့ Label ရယ်၊ Enter Text Here ရေးထားတဲ့ Label ရယ်၊ ပုံထည့်ထားတဲ့ label ရယ်ပါ။ စုံအောင်လို ့ထည့်ပေးထားတာပါ။
    ဒီတော့ Label တစ်ခုရယ်၊ TextBox တစ်ခုရယ် ကို ပထမ declaration လုပ်လိုက်ပါတယ်။
    Label lblEcho;
    Text txt;
    
    ဆိုပြီးတော့....

    အငး် ဒီနေရာမှာ ကွန်ပျူတာရဲ ့ x,y coordinate ဘယ်လိုယူသလဲ ပြောရအုံးမယ်။ အောက်ကပုံမှာ လေ့လာကြည့်ပါ။
    label15.jpg
    ကျနော်တို ့ form and controls တွေရဲ ့ x, y coordinate ယူပုံက ကွန်ပျူတာ screen ကို ကြည့်လိုက်ပါ။ ဘယ်ဘက်အပေါ်ဆုံးထောင့်က (x,y) (0,0) ပါ။
    x တန်ဖိုးက ညာဘက်ကို တိုးသွားပါတယ်။
    y တန်ဖိုးက အောက်ဘက်ကို တိုးသွားပါတယ်။
    အဲဒီ့အတိုင်း form တွေ၊ controls ကို တွက်ချက်ရပါမယ်။
    ဒါကြောင့် controls တွေကို နေရာချပုံနဲ ့ပါတ်သတ်လာရင် x,y coordinate ကို ယူပြီး တွက်တာကို သတိထားမိစေချင်ပါတယ်။ Label.Location မှာ သတိထားကြည့်ပါ။

    ပြီးနောက်မှာ class ရဲ ့ constructor ဖြစ်တဲ့ LabelTextChange() ထဲမှာ form တစ်ခုလုံးနဲ ့ ပါတ်သတ်တဲ့ code တွေ ရေးပါမယ်။
    Text = "Sample";
    Size = new Size(300, 250);
    
    Text = "Sample"; ဆိုပြီး Form name ပေးလိုက်ပါတယ်။
    Form ရဲ ့ Size ကို 300 နဲ ့ 250 ပေးလိုက်ပါတယ်။
    Size(int width, int height) ။ ဆိုတော့ 300 က Width ပါ။ 250 က Height ပါ။

    lblEcho
    ပထမဆုံး Label တစ်ခု ဖန်တီးဖို ့အတွက် new ဆိုတဲ့ operator နဲ ့ Label object ကို ဖန်တီးလိုက်ပါတယ်။

    new operator
    C# မှာ new ဆိုတဲ့ keyword ကို operator တစ်ခုအနေနဲ ့ကော modifier တစ်ခုအနေနဲ ့ကော နှစ်မျိုးသုံးစွဲပါတယ်။ new modifier ကိုတော့ ထားလိုက်ပါ။ အခုက new operator နဲ ့သက်ဆိုင်တဲ့ အကြောင်းပါ။
    new operator က objects တွေကို ဖန်တီးပေးတယ်။ ပြီးတော့ သူနဲ ့ သက်ဆိုင်တဲ့ constructor ကိုလဲ ဆွဲသုံးပေးပါတယ်။ အဲဒီ့မှာ object အကြောင်း ထပ်ပြောရအုံးမယ်။ C# ဆိုတာ object-oriented programming language ဆိုတာတော့ လူတိုင်းသိပါတယ်။ အဲတော့ C# မှာ အရာအားလုံးကို Object တွေနဲ ့ ဖန်းတီးဖွဲ ့စည်း ထားတာ။ အခုလဲ Label ဆိုတဲ့ object ကိုလဲ .NET Framework library ထဲမှာ ဖန်တီးပြီးသား။ အဲဒါကို ကျနော်
    တို ့က အလွယ်တကူ new keyword ကို အသုံးပြုပြီး ဖန်တီးလိုက်တာ။ နားလည်ရဲ ့လား မသိဘူး။ ကျန်တဲ့ controls တွေလဲ ဒီအတိုင်းပဲ။

    ကဲ ဒီတော့ new နဲ ့ Label() constructor function ကို ခေါ်ပြီး Label ကို create လုပ်လိုက်ပါပြီ။
    lblEcho.Parent = this; ဆိုတာက ဒီ Label ကို Sample လို ့ အမည်ပေးထားတဲ့ Form ကနေ ပိုင်ဆို်င်တယ် ဆိုတာကို ဆိုလိုတာပါ။ အဲဒါကို this pointer နဲ ့ အသုံးပြုထားပါတယ်။ this pointer အကြောင်းတော့ မပြောတော့ဘူးဗျာ။ www.msdn.com ထဲမှာ ရှာဖတ်ကြည့်လိုက်တော့။ နို ့မို့ဆို ရှေ ့ရောက်မှာ မဟုတ်တော့ဘူး။

    lblEcho.Text = "test";
    Label ထဲမှာ ပေါ်မဲ့စာသားကို test လို ့ပေးထားပါတယ်။

    lblEcho.Location = new Point(0,0);
    Point() function က System.Drawing; က လာတာပါ။ (0,0) က အထက်က ရှင်းပြခဲ့တဲ့ (x,y) coordinate တန်ဖိုးတွေပါ။ (0,0) ဆိုတော့ Form ရဲ ့ ဘယ်ဘက် အပေါ်ဆုံးထောင့်မှာ နေရာယူပါလိ့မ်မယ်။

    lblEcho.AutoSize = true;
    လို ့ဘာကြောင့် ရေးထားသလဲသိချင်ရင် true နေရာမှာ false ပေးပြီး သေချာကြည့်ကြည့်ပါ။ ဘာပြောင်းသွားလဲ ဆိုတာကို။

    lblEcho.BorderStyle = BorderStyle.Fixed3D;
    Label နဲ ့ပါတ်သတ်တဲ့ BorderStyle (၃) မျိုးရှိပါတယ်။ ကျနော် (၃)မျိုးလုုံး အသုံးပြုပေးထားပါတယ်။
    lblEcho.BorderStyle = BorderStyle.Fixed3D;
    lblImage.BorderStyle = BorderStyle.None;
    lblCaption.BorderStyle = BorderStyle.FixedSingle;
    တစ်ခုနဲ ့တစ်ခု ကွာခြားပုံကို သတိထားမိမယ် ထင်ပါတယ်။

    Image img = Image.FromFile("ball_blue_1.png");
    ဆိုတာ Image ကို FromFile ဆိုတဲ့ fuction နဲ ့ form ပေါ်မှာဆွဲတင်ထားဖို ့ပါ။ ပုံကို လက်ရှိ ရေးနေတဲ့ program ရဲ ့
    destination folder ထဲက bin -> Debug folder ထဲမှာ ရှိနေဖို ့လိုပါမယ်။ ဒါမှ form ပေါ်မှာ ပုံပေါ်လာမှာပါ။ Image ကိုလဲ Label ထဲမှာ ထည့်ထားတာပါ။ တစ်ခု သတိထားရမှာက ခင်ဗျားထည့်မဲ့ ပုံရဲ ့ name ကို "ball_blue_1.png" ဆိုတဲ့နေရာမှာ ပြောင်းပေးလိုက်ဖို ့မမေ့ပါနဲ ့။ extension ကလဲ .png မှ မဟုတ်ပါဘူး။ .bmp လဲ ရပါတယ်။ .jpg လဲ ရပါတယ်။ အဲဒါလဲ မမေ့ပါနဲ ့။

    lblImage.Anchor = AnchorStyles.Top | AnchorStyles.Right;
    ဆိုတာ ပုံကို form ရဲ ့ ညာဘက် အပေါ်ထောင့်မှာ အမြဲပေါ်အောင် ရေးထားတာပါ။ Anchor ဆိုတာကတော့ သိတဲ့အတိုင်း သင်္ဘောမှာသုံးတဲ့ ကျောက်ဆူးလိုမျိုးပေါ့။ မြဲမြံနေတယ်။ နေရာ မရွှေ ့ဘူး။ form ကို mouse နဲ ့ အကျဉ်းအကျယ် လုပ်ကြည့်လိုက်ရင် သတိထားမိပါလိမ့်မယ်။

    lblCaption.Size = new Size(lblCaption.PreferredWidth, lblCaption.PreferredHeight);
    ဆိုတာက အဲဒီ့ label ထဲမှာ ထည့်မဲ့ text ရဲ ့ width နဲ ့ height ရှိသလောက် label ရဲ ့ size ကို ချဲ ့ဖို ့ရေးထားတာပါ။

    lblImage.Size = new Size(img.Width, img.Height);
    ဆိုတာကတော့ ပုံရဲ ့ နဂိုရှိနေတဲ့ size အတိုင်း ရှိနေအောင်လို ့ပါ။

    txt.TextChanged += new System.EventHandler(txt_TextChanged);
    ဆိုတာက ကျနော်တို ့ textbox မှာ ရိုက်သမျှ စာအားလုံးကို အပေါ်က test ဆိုတဲ့ label ထဲမှာ ပေါ်နေဖို ့အတွက် txt_TextChanged ဆိုတဲ့ function တစ်ခု သပ်သပ်ရေးပြီး EventHandler နဲ ့ handle လုပ်ထားတာပါ။

    နောက်ဆုံးတော့ Main() function ထဲမှာ
    Application.Run(new LabelTextChange());
    နဲ ့ form ကို run လိုက်ပါတယ်။

    အဲလောက်ဆို Label နဲ ့ပါတ်သတ်လို ့လုံလောက်ပြီလို ့ ကျနော် ယူဆပါတယ်။ လိုအပ်ရင်တော့ မေးပါ။

    OK!
    Thanks for reading my post !!
    See u around, buddy !!
  • edited February 2010 Registered Users
    Buttons
    Button ဆိုတာတော့ user ကို click ခိုင်းတဲ့ control ပေ့ါဗျာ။ Button တွေ ့ရင် ဘာမှ မေးမနေနဲ ့ click သာ click
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class BasicCalculator : Form
    {
        private Label label1;
        private Label lblfirstnum;
        private Label lblsecondnum;
        private TextBox txtfirstnum;
        private TextBox txtsecondnum;
        private Button btnPlus;
        private Button btnMinus;
        private Button btnMultiply;
        private Button btnDivision;
        private Label lblResult;
        private TextBox txtResult;
    
        public BasicCalculator()
        {
            InitializeComponent();
        }
    
        public void InitializeComponent()
        {
            // 
            // label1
            // 
            label1 = new Label();
            label1.BackColor = Color.Olive;
            label1.Dock = DockStyle.Top;
            label1.ForeColor = Color.Blue;
            label1.Location = new Point(0, 0);
            label1.Size = new Size(260, 23);
            label1.Text = "Four Basic Sample Calculator";
            label1.TextAlign = ContentAlignment.MiddleCenter;
            // 
            // lblfirstnum
            // 
            lblfirstnum = new Label();
            lblfirstnum.AutoSize = true;
            lblfirstnum.Location = new Point(23, 57);
            lblfirstnum.Size = new Size(94, 13);
            lblfirstnum.Text = "Enter First Number";
            // 
            // lblsecondnum
            // 
            lblsecondnum = new Label();
            lblsecondnum.AutoSize = true;
            lblsecondnum.Location = new Point(132, 57);
            lblsecondnum.Size = new Size(112, 13);
            lblsecondnum.Text = "Enter Second Number";
            // 
            // txtfirstnum
            //
            txtfirstnum = new TextBox();
            txtfirstnum.Location = new Point(26, 73);
            txtfirstnum.Size = new Size(99, 20);
            txtfirstnum.TabIndex = 1;
            txtfirstnum.TextAlign = HorizontalAlignment.Right;
            // 
            // txtsecondnum
            // 
            txtsecondnum = new TextBox();
            txtsecondnum.Location = new Point(135, 73);
            txtsecondnum.Size = new Size(96, 20);
            txtsecondnum.TabIndex = 2;
            txtsecondnum.TextAlign = HorizontalAlignment.Right;
            // 
            // btnPlus
            // 
            btnPlus = new Button();
            btnPlus.Location = new Point(26, 120);
            btnPlus.Size = new Size(41, 25);
            btnPlus.TabIndex = 3;
            btnPlus.Text = "+";
            btnPlus.UseVisualStyleBackColor = true;
            btnPlus.Click += new EventHandler(this.btnPlus_Click);
            //
            // btnMinus
            // 
            btnMinus = new Button();
            btnMinus.Location = new Point(84, 120);
            btnMinus.Size = new Size(41, 25);
            btnMinus.TabIndex = 4;
            btnMinus.Text = "-";
            btnMinus.UseVisualStyleBackColor = true;
            btnMinus.Click += new EventHandler(this.btnMinus_Click);
            // 
            // btnMultiply
            // 
            btnMultiply = new Button();
            btnMultiply.Location = new Point(135, 120);
            btnMultiply.Size = new Size(41, 25);
            btnMultiply.TabIndex = 5;
            btnMultiply.Text = "*";
            btnMultiply.UseVisualStyleBackColor = true;
            btnMultiply.Click += new EventHandler(this.btnMultiply_Click);
            // 
            // btnDivision
            // 
            btnDivision = new Button();
            btnDivision.Location = new Point(190, 120);
            btnDivision.Size = new Size(41, 25);
            btnDivision.TabIndex = 6;
            btnDivision.Text = "/";
            btnDivision.UseVisualStyleBackColor = true;
            btnDivision.Click += new EventHandler(this.btnDivision_Click);
            // 
            // lblResult
            // 
            lblResult = new Label();
            lblResult.AutoSize = true;
            lblResult.Location = new Point(23, 164);
            lblResult.Size = new Size(37, 13);
            lblResult.Text = "Result";
            // 
            // txtResult
            // 
            txtResult = new TextBox();
            txtResult.Location = new Point(26, 195);
            txtResult.Multiline = true;
            txtResult.Size = new Size(205, 29);
            txtResult.TabIndex = 7;
            txtResult.TextAlign = HorizontalAlignment.Right;
            // 
            // Form1
            // 
            this.Text = "Basic Calculator";
            this.ClientSize = new Size(260, 236);
            this.MaximizeBox = false;
    
            this.Controls.Add(label1);
            this.Controls.Add(lblfirstnum);
            this.Controls.Add(lblsecondnum);
            this.Controls.Add(txtfirstnum);
            this.Controls.Add(txtsecondnum);
            this.Controls.Add(btnPlus);
            this.Controls.Add(btnMinus);
            this.Controls.Add(btnMultiply);
            this.Controls.Add(btnDivision);
            this.Controls.Add(lblResult);
            this.Controls.Add(txtResult);
            
        }
        private void btnPlus_Click(object sender, EventArgs e)
        {
            double sum = Convert.ToDouble(txtfirstnum.Text) + Convert.ToDouble(txtsecondnum.Text);
            txtResult.Text = sum.ToString();
        }
    
        private void btnMinus_Click(object sender, EventArgs e)
        {
            double sum = Convert.ToDouble(txtfirstnum.Text) - Convert.ToDouble(txtsecondnum.Text);
            txtResult.Text = sum.ToString();
        }
    
        private void btnMultiply_Click(object sender, EventArgs e)
        {
            double sum = Convert.ToDouble(txtfirstnum.Text) * Convert.ToDouble(txtsecondnum.Text);
            txtResult.Text = sum.ToString();
        }
    
        private void btnDivision_Click(object sender, EventArgs e)
        {
            if (Convert.ToDouble(txtfirstnum.Text) == 0 && Convert.ToDouble(txtsecondnum.Text) == 0)
            {
                MessageBox.Show("Result of function is undefined.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    
            else if (Convert.ToDouble(txtsecondnum.Text) == 0)
            {
                MessageBox.Show("Cannot divide by zero.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    
            else
            {
                double sum = Convert.ToDouble(txtfirstnum.Text) / Convert.ToDouble(txtsecondnum.Text);
                txtResult.Text = sum.ToString();
            }
        }
    
    
        public static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new BasicCalculator());
        }
    }
    
    Output

    button11o.jpg

    ကိုယ့်ဘာသာ စမ်းကြည့်ပေါ့ဗျာ။
    ကျနော်ကတော့ တစ်ခုပဲ စမ်းပေးလိုက်ပါတယ်။ အောက်ကပုံကို ကြည့်ပါ။

    button12.jpg

    How To Works


    Button အကြောင်းဆိုပေမဲ့ Button ချည်းပဲ ကျနော် မသုံးထားပါဘူး။ ကျန်တဲ့ controls တွေနဲ ့ တွဲသုံးဖို ့ပါ ကျနော် စရည်ရွယ်ပါတယ်။ ဒါကြောင့် Label နဲ ့ TextBox တွေပါ ပါလာပါပြီ။ ကဲ ကြည့်ရအောင်

    • ကျနော်တို ့လိုချင်တဲ့ Label (၄)ခု၊ Textbox (၃)ခု၊ Button (၄)ခုတို ့ကို declaration လုပ်လိုက်ပါတယ်။
    • label1 ကို ကြည့်ပါ။ ForeColor နဲ ့ BackColor တော့ ရှင်းပါတယ်။ Size နဲ ့ Location ကလဲ အရင် post မှာ ရှင်းပြပြီးသား။ TextAlign ဆိုတာကတော့ Text ကို ဘယ်၊ ညာ၊ အလယ် စသဖြင့် ညှိတာပေါ့ဗျာ။ အဲမှာ
    • label1.Dock ဆိုတာ တွေ ့တယ်မို ့လား။ သူ ့အကြောင်းနဲ ့ပါတ်သတ်ပြီး ကျနော်သပ်သပ် ခေါင်းစဉ်နဲ ့ ရေးပေးပါ မယ်။ Dock လုပ်ချင်တဲ့ Controls တစ်ခုကို form ပေါ်မှာ Top, bottom, left, right စသဖြင့် နေရာချတာပါပဲ။ ကဲ ကျန်တာတွေက အရင် post မှာကတည်းက ပါပြီးသား property တွေဆိုတော့ မပြောတော့ဘူးနော်။
    • lblfirstnum နဲ့ lblsecondnum နဲ ့က ရှင်းပြဖို ့မလိုဘူး။ txtfirstnum.TabIndex=1; ကိုကြည့်ပါ။ အဲဒီ့ TabIndex ဆိုတာ user က အကယ်၍ mouse မသုံးပဲနဲ ့ keyboard ကိုသာ အသုံးပြုခဲ့မယ်ဆို အဆင်ပြေအောင် Keyboard က Tab Key ကို အလုပ်ပေးထားတာပါ။ Tab Key က ကျနော်တို ့ပေးထားတဲ့ နံပါတ်စဉ်လိုက်အတိုင်း အလုပ်လုပ်ပါလိမ့်မယ်။ အဲဒီ့မှာ နောက်ထပ် တခြား controls တွေကို TabIndex ပေးထားတာတွေကို လိုက်ကြည့်လိုက်ပါ။ မလိုတဲ့ controls တွေကိုတော့ မပေးထားပါဘူး။ ဟုတ်ပြီနော်။
    • btnPlus.UseVisualStyleBackColor = true; ဆိုတာက Button ကို Theme လေး နဲနဲ ကြည့်ကောင်းအောင် ထည့်ပေးထားတာပါ။
    • btnPlus, btnMinus, btnMultiply, btnDivision တို ့ကို click လိုက်ရင် ဘာလုပ်ပေးမလဲ ဆိုတာကို သီးခြား function လေးတွေအလိုက် အောက်မှာ ရေးထားပါတယ်။ ဥပမာ အနေနဲ ့ btnPlus_Click() ကို ရှင်းပြပါမယ်။ txtfirstnum နဲ ့ txtsecondnum မှာ ထည့်ခိုင်းထားတာတွေမှာ user က ဂဏန်းတွေ ထည့်ပါမယ်။ အဲဒါတွေကို string type အနေနဲ ့ဖမ်းယူထားပါတယ်။ ဒါကြောင့် ဂဏန်းဆိုင်ရာ data type တစ်ခုဖြစ်တဲ့ double ဖြစ်အောင်လို ့ Convert.ToDouble() ဆိုတဲ့ function ကို အသုံးပြုပါတယ်။


    Advice
    ပထမဆုံးက အဲဒီ့ calculator ဆိုင်ရာ basic logic လေးမှာတောင် သိသိသာသာ လိုအပ်နေတဲ့ အချက်တစ်ချက် program ထဲမှာ ရှိပါတယ်။ သတိထားမိလား မသိဘူး။ တွေ ့မိနိုင်မယ် ထင်ပါတယ်။ ဘာလဲဆိုတော့ firstnumber နဲ ့ second number Textbox တွေမှာ Input ဖမ်းတဲ့အခါမှာ Filter စစ်ထားတာ မရှိသေးဘူး။ အဲတော့ User က ဂဏန်းတွေ မထည့်ပဲနဲ ့ စာလုံး အက္ခရာတွေသာ ထည့်ခဲ့ရင် ဘယ်လိုလုပ်မလဲ။ လောလောဆယ်တော့ error တက်ပါတယ်။ ကျနော်က အဲဒီ့နေရာလေးကို ခင်ဗျားတို ့အတွက် ချန်ထားလို်က်ပါတယ်။ ဂဏန်းတွေချည်းပဲ filter စစ်မဲ့ logic လေးကို ကိုယ့်ဘာသာ ဆက်ရေးစေချင်ပါတယ်။

    ပြီးတော့လဲ controls တွေရဲ ့ property နဲ ့ပါတ်သတ်လို ့ ကိုယ့်ဘာသာ ပြုပြင် ပြောင်းလဲ ကြည့်ပါ။ Program စဉ်းစားပုံ စဉ်းစားနည်းနဲ ့ပါတ်သတ်လို ့ပြောရအုံးမယ်။ ကျနော်တို ့logic တစ်ခုရလို ့program တစ်ပုဒ် ရေးတယ်ပေ့ါဗျာ။ အဲဒီ့မှာ ကျနော်တို ့ဘာစဉ်းစားရမလဲဆိုတော့ ကျနော်တို ့ ရေးလိုက်တဲ့ application ကို user ဟာ ဘာမှ သိနားလည်မှာ မဟုတ်ဘူး ပုံစံနဲ ့ သူ ့အတွက် အလွယ်တကူ အဆင်ပြေအောင်၊ ပြီးတော့ သူ စဉ်းစားနိင်မဲ့ အချက်တွေအားလုံးကို ပြီးပြည့်စုံအောင် ရေးပေးထားဖို ့လိုပါမယ်။ ဥပမာ ဒီ program မှာဆို ဂဏန်းတွေ စား (divide by) တဲ့ နေရာမှာ user တစ်ယောက်က 1 ကို 0 နဲ ့ စားချင်လဲ စားမိမှာပဲ။ အဲဒီ့မှာ ကျနော်တို ့က mathematical theory နဲ ့ပြန်ညှိပေးရပါမယ်။ သချင်္ာမှာ ပိုင်းခြေ 0 (zero) မဖြစ်ရပါဘူး။ အဲလိုမျိုး အဘက်ဘက်က အခြားသောအခြားသော ထောင့်တွေကနေ စဉ်းစားနိုင်ရပါမယ်။ ကျနော့် ဆရာက ကျနော့်ကို ပေးတဲ့ Idea ကို ခင်ဗျားတို ့ကို ပြန် share ပေးလိုက်တာပါ။ ဒါကြောင့် post တွေ ရေးတဲ့ နေရာမှာလဲ သာမန် သိနေတဲ့ ကိစ္စကိုလဲ လုံး၀ မသိသေးတဲ့သူတွေအတွက် ရည်ရွယ်ပြီး တတ်နိုင်သမျှ အသေးစိတ်ထားပါတယ်။ တချို ့ဟာတွေက ဆရာလုပ်ချင်လို ့ပြောထားတာ မဟုတ်ပါဘူးဗျာ။

    ကျနော့် post တွေက အစဉ်လိုက်ဖတ်မှ ရပါလိမ့်မယ်။ post တစ်ခုပြီးတစ်ခု တဖြည်းဖြည်းနဲ ့ မြင့်သွားပါလိမ့်မယ်။ ဒါကြောင့် နောက်ပိုင်းမှ သွားဖတ်မိရင် ရှင်းလင်းချက်က ပါမှာမဟုတ်ဘူး။ ရှင်းလင်းချက်တွေက post တစ်ခုချင်းစီ အလိုက် တဖြည်းဖြည်း ရှင်းပြသွားပါမယ်။ ရှင်းပြီးသားဟာကို နောက်မှာ ထပ်မရှင်းပြတော့ပါဘူး။ Post တစ်ခုချင်းစီ အလိုက် တတ်နိုင်သမျှ ကွာဟ မသွားအောင် ကျနော် စီစဉ်ထားပါမယ်။

    OK!
    Thanks for reading my post!!
    See u around, buddy !!
    Have a nice day !!
  • edited February 2010 Registered Users
    Check Box

    Check Box (checkbox, tickbox, or tick box) ဆိုတာ user တွေကို ရွေးချယ်ခွင့်များစွာ ပေးထားပြီးတော့ အဲထဲကနေ user စိတ်ကြိုက် ကြိုက်သလောက် ရွေးချယ်ပေးထားရပါမယ်။ user က checked ပေးလိုက်တဲ့ အရာအားလုံးရဲ ့ နောက်ကွယ်မှာ သူနဲ ့ ပါတ်သတ်တဲ့ လုပ်ဆောင်မှု တစ်ခုစီ ရှိပါလိမ့်မယ်။ Check Box ကို နောက်တစ်မျိုးပြောရရင် True or False ပါပဲ။ ဆိုလိုတာက သူ ့ကို unchecked ပေးထားရင် သူနဲ ့ ပတ်သတ်တဲ့ အလုပ်ကို မလုပ်ပါဘူး။ checked (true) ဖြစ်သွားတာနဲ ့ သူ ့ရဲ ့နောက်ကွယ်က အလုပ်ကို လုပ်ပါလိမ့်မယ်။ Check Box တွေကို နေရာတော်တော်များများ တွေ ့ဖူးမှာပါ။ အလွယ်ဆုံး ဥပမာ ပေးရရင် ကျနော်တို ့software တစ်ခုကို စက်ထဲမှာ install လုပ်လိုက်တဲ့အခါ installation ပြီးခါနီးကျရင် Desktop ပေါ်မှာနဲ ့ Quick Launch မှာ icon တင်ပေးထားရမလားဆိုတာ software အားလုံးနီးပါး မေးကြတာကို တွေ ့ဖူးမှာပါ။ အဲလို နေရာမှာ Check Box သုံးရပါမယ်။ ပုံကို ကြည့်လိုက်ရင် ရှင်းသွားပါလိမ့်မယ်။

    checkbox11.jpg

    checkbox12.jpg

    ပုံကိုကြည့်ပါ။ Check Box (၅) ခုပါပါတယ်။ အပေါ်ဆုံးမှာဆို Microsofft .NET 2.0 ဆိုတဲ့ စာသားလေး မှိန်နေတာ တွေ ့ပါလိမ့်မယ်။ ဆိုလိုတာက ကျနော့်စက်မှာ Microsoft .NET 2.0 က ရှိပြီးသားမို ့လို ့ အဲဒါကို install မလုပ်တော့ဘူး ဆိုတဲ့ အဓိပ္ပါယ်နဲ ့ မှိန်ထားတာပါ။ ဒုတိယ တစ်ခုမှာဆို Documentation ကို သူ ့ဘာသာ Auto-Checked ပေးထားပါတယ်။ Documentation ကို ဖတ်စေချင်လို ့Recommend ပေးထားတဲ့ သဘောပါ။ မကြိုက်ရင် ဖြုတ်လိုက်လို ့ ရပါတယ်။ အောက်က (၃)ခုကတော့ user-choice ပေးထားတာပါ။ ကိုယ့်အတွက် မလိုဘူးဆို မတင်နဲ ့ပေါ့။ အဲလောက်ဆို နဲနဲတော့ သဘောပေါက်ပြီ ထင်တယ်။

    Check Box အကြောင်း ပြောမယ်ဆို Radio Button အကြောင်းလဲ မပြောမဖြစ် ပြောရမှာပါပဲ။ Radio Button နဲ ့ ပါတ်သတ်လို ့ကျနော် သပ်သပ် ရေးပေးမှာပါ။ ဒါပေမဲ့ ဒီမှာလဲ မပြောမဖြစ်မို ့ပြောရပါအုံးမယ်။
    Check Box နဲ ့ Radio Button တို ့ဟာ အလုပ်လုပ်ပုံချင်း အတူတူပါပဲ။ ဘာကွာလဲဆိုတော့ ဘယ်နေရာမှာ အသုံးပြုရမလဲ ဆိုတာပါပဲ။ Radio Button ကို ဘယ်နေရာမှာသုံးမလဲဆိုရင် လုံး၀ ဆန် ့ကျင်ဘက် opposite ဖြစ်တဲ့နေရာတွေမှာ အသုံးပြုပါမယ်။
    checkbox14.png

    checkbox13.png

    ဒီလိုမျိုးနေရာတွေမှာ Radio Button ကို အသုံးပြုရပါမယ်။ ကိုယ်သုံးချင်သလို သုံးမယ်တော့ မလုပ်နဲ ့ပေါ့ဗျာ။ programming language ဆိုတဲ့အတိုင်း သူကလဲ ဘာသာစကားတစ်ခုပါပဲ။ ဒီတော့ သူ ့မှာလဲ သူ ့ရဲ ့ Grammer ရှိတာပေါ့ဗျာ။ programming terms နဲ ့ဆိုရင်တော့ syntax ပေါ့။ ဆိုတော့ သူ ့အသုံးပြုပုံအလိုက်ပဲ အသုံးပြုကြပါ။

    Namespace: System.Windows.Forms

    ကဲ Check Box Control နဲ ့ ပါတ်သတ်တဲ့ Sample တစ်ခုလောက် ရေးကြည့်ရအောင်။


    /* program code ထည့်လိုက်ရင် စာလုံးရေက ၁၅၀၀၀ ကျော်နေပါတယ်။ ဒါကြောင့် နောက် post မှာ ဆက်ဖတ်ပါ။ */


    OK!
    Thanks for reading my posts!!
    See u around, buddy !!
    Have a nice day !!
  • edited February 2010 Registered Users
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class Zodiac : Form
    {
        private CheckBox cbAries;
        private CheckBox cbTaurus;
        private CheckBox cbGemini;
        private CheckBox cbCancer;
        private CheckBox cbLeo;
        private CheckBox cbVirgo;
        private CheckBox cbLibra;
        private CheckBox cbScorpio;
        private CheckBox cbSagittarius;
        private CheckBox cbCapricorn;
        private CheckBox cbAquarius;
        private CheckBox cbPisces;
        private Label lblText;
        private Button btnDisplay;
        private Button btnClose;
        private PictureBox pictureBox1;
        private Label lblPicture;
    
        public Zodiac()
        {
            InitializeComponent();
        }
    
        public void InitializeComponent()
        {
            // cbAries
            cbAries = new CheckBox();
            cbAries.ForeColor = Color.Yellow;
            cbAries.Location = new Point(12, 25);
            cbAries.Name = "cbAries";
            cbAries.Text = "ARIES";
            cbAries.UseVisualStyleBackColor = true;
            // cbTaurus
            cbTaurus = new CheckBox();
            cbTaurus.ForeColor = Color.Yellow;
            cbTaurus.Location = new Point(12, 45);
            cbTaurus.Name = "cbTaurus";
            cbTaurus.Text = "TAURUS";
            cbTaurus.UseVisualStyleBackColor = true;
            // cbGemini
            cbGemini = new CheckBox();
            cbGemini.ForeColor = Color.Yellow;
            cbGemini.Location = new Point(12, 65);
            cbGemini.Name = "cbGemini";
            cbGemini.Text = "GEMINI";
            cbGemini.UseVisualStyleBackColor = true;
            // cbCancer
            cbCancer = new CheckBox();
            cbCancer.ForeColor = Color.Yellow;
            cbCancer.Location = new Point(12, 85);
            cbCancer.Name = "cbCancer";
            cbCancer.Text = "CANCER";
            cbCancer.UseVisualStyleBackColor = true;
            // cbLeo
            cbLeo = new CheckBox();
            cbLeo.ForeColor = Color.Yellow;
            cbLeo.Location = new Point(12, 105);
            cbLeo.Name = "cbLeo";
            cbLeo.Text = "LEO";
            cbLeo.UseVisualStyleBackColor = true;
            // cbVirgo
            cbVirgo = new CheckBox();
            cbVirgo.ForeColor = Color.Yellow;
            cbVirgo.Location = new Point(12, 125);
            cbVirgo.Name = "cbVirgo";
            cbVirgo.Text = "VIRGO";
            cbVirgo.UseVisualStyleBackColor = true;
            // cbLibra
            cbLibra = new CheckBox();
            cbLibra.ForeColor = Color.Yellow;
            cbLibra.Location = new Point(12, 145);
            cbLibra.Name = "cbLibra";
            cbLibra.Text = "LIBRA";
            cbLibra.UseVisualStyleBackColor = true;
            // cbScorpio
            cbScorpio = new CheckBox();
            cbScorpio.ForeColor = Color.Yellow;
            cbScorpio.Location = new Point(12, 165);
            cbScorpio.Name = "cbScorpio";
            cbScorpio.Text = "SCORPIO";
            cbScorpio.UseVisualStyleBackColor = true;
            // cbSagittarius
            cbSagittarius = new CheckBox();
            cbSagittarius.ForeColor = Color.Yellow;
            cbSagittarius.Location = new Point(12, 185);
            cbSagittarius.Name = "cbSagittarius";
            cbSagittarius.Text = "SAGITTARIUS";
            cbSagittarius.UseVisualStyleBackColor = true;
            // cbCapricorn
            cbCapricorn = new CheckBox();
            cbCapricorn.ForeColor = Color.Yellow;
            cbCapricorn.Location = new Point(12, 205);
            cbCapricorn.Name = "cbCapricorn";
            cbCapricorn.Text = "CAPRICORN";
            cbCapricorn.UseVisualStyleBackColor = true;
            // cbAquarius
            cbAquarius = new CheckBox();
            cbAquarius.ForeColor = Color.Yellow;
            cbAquarius.Location = new Point(12, 225);
            cbAquarius.Name = "cbAquarius";
            cbAquarius.Text = "AQUARIUS";
            cbAquarius.UseVisualStyleBackColor = true;
            // cbPisces
            cbPisces = new CheckBox();
            cbPisces.ForeColor = Color.Yellow;
            cbPisces.Location = new Point(12, 245);
            cbPisces.Name = "cbAquarius";
            cbPisces.Text = "PISCES";
            cbPisces.UseVisualStyleBackColor = true;
    
            // lblText
            lblText = new Label();
            lblText.BackColor = Color.White;
            lblText.BorderStyle = BorderStyle.Fixed3D;
            lblText.Font = new System.Drawing.Font("Times New Roman", 11.25F);
            lblText.Location = new Point(128, 25);
            lblText.Name = "lblText";
            lblText.Size = new Size(273, 197);
            lblText.TextAlign = ContentAlignment.MiddleCenter;
            lblText.Text = 
                "Ladies and Gentlemen!!\n" + 
                "Do you believe fortune telling that " + 
                "can be called astrology?\n" +
                "Do you believe that Zodiac influenced " + 
                "all of people?\n" + 
                "Here, I showed these Zodiacs for you !!" + 
                "Don't waste the time!! Hurry up !!";
    
            // btnDisplay
            btnDisplay = new Button();
            btnDisplay.Location = new Point(128, 234);
            btnDisplay.Name = "btnDisplay";
            btnDisplay.Size = new Size(99, 31);
            btnDisplay.BackColor = Color.Gray;
            btnDisplay.ForeColor = Color.Yellow;
            btnDisplay.TabIndex = 1;
            btnDisplay.Font = new System.Drawing.Font("Zawgyi-One", 9.25F);
            btnDisplay.Text = "ကြည့်မယ်";
            btnDisplay.UseVisualStyleBackColor = false;
            btnDisplay.Click += new System.EventHandler(this.btnDisplay_Click);
    
            // btnClose
            btnClose = new Button();
            btnClose.Location = new System.Drawing.Point(302, 234);
            btnClose.Name = "btnClose";
            btnClose.Size = new System.Drawing.Size(99, 31);
            btnClose.TabIndex = 2;
            btnClose.BackColor = Color.Gray;
            btnClose.ForeColor = Color.Yellow;
            btnClose.Font = new System.Drawing.Font("Zawgyi-One", 9.25F);
            btnClose.Text = "ပိတ်မယ်";
            btnClose.UseVisualStyleBackColor = true;
            btnClose.Click += new System.EventHandler(this.btnClose_Click);
    
            // pictureBox1
            Image img = Image.FromFile("1.jpeg");
            pictureBox1 = new PictureBox();
            pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
            pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
            pictureBox1.Location = new Point(426, 25);
            pictureBox1.Name = "pictureBox1";
            pictureBox1.Size = new Size(124, 104);
            pictureBox1.Image = img;
    
            // lblPicture
            lblPicture = new Label();
            lblPicture.Location = new Point(426, 145);
            lblPicture.Name = "lblPicture";
            lblPicture.Size = new Size(124, 104);
    
            // form
            this.BackColor = System.Drawing.SystemColors.HotTrack;
            this.ClientSize = new Size(564, 290);
            this.MaximizeBox = false;
            this.Text = "Zodiac";
    
            // Adding Controls on the form
            this.Controls.Add(this.cbAries);
            this.Controls.Add(this.cbTaurus);
            this.Controls.Add(this.cbGemini);
            this.Controls.Add(this.cbCancer);
            this.Controls.Add(this.cbLeo);
            this.Controls.Add(this.cbVirgo);
            this.Controls.Add(this.cbLibra);
            this.Controls.Add(this.cbScorpio);
            this.Controls.Add(this.cbSagittarius);
            this.Controls.Add(this.cbCapricorn);
            this.Controls.Add(this.cbAquarius);
            this.Controls.Add(this.cbPisces);
            this.Controls.Add(this.lblText);
            this.Controls.Add(this.btnDisplay);
            this.Controls.Add(this.btnClose);
            this.Controls.Add(this.pictureBox1);
            this.Controls.Add(this.lblPicture);
        }
    
        public static void Main(string[] args)
        {
            Application.Run(new Zodiac());
        }
    
        private void btnClose_Click(object who, EventArgs exe)
        {
            DialogResult result = MessageBox.Show("Are you sure to want to exit?", "Zodiac", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
            if (result == DialogResult.Yes)
                Application.Exit();
        }
    
        private void btnDisplay_Click(object who, EventArgs ex)
        {
    
            if (cbAries.Checked == true)
            {
                Image img = Image.FromFile("aries.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Energetic. Adventurous and spontaneous. Confident and enthusiastic. " +
                    "Fun. Loves a challenge. EXTREMELY impatient. Sometimes selfish. " +
                    "Short fuse.(Easily angered.) Lively, passionate, and sharp wit. " +
                    "Outgoing. Lose interest quickly - easily bored. Egotistical. " +
                    "Courageous and assertive. Tends to be physical and athletic.";
            }
            else if (cbTaurus.Checked == true)
            {
                Image img = Image.FromFile("taurus.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Charming but aggressive. Can come off as boring, but they are not. " +
                    "Hard workers. Warm-hearted. Strong, has endurance. Solid beings " +
                    "who are stable and secure in their ways. Not looking for shortcuts. " +
                    "Take pride in their beauty. Patient and reliable. Make great friends. " +
                    "and give good advice. Loving and kindLoves hard - passionate. " +
                    "Express themselves emotionally. Prone to ferocioustemper-tantrums. " +
                    "Determined. Indulge themselves often. Very generous.";
            }
            else if (cbGemini.Checked == true)
            {
                Image img = Image.FromFile("gemini.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Smart and witty. Outgoing, very chatty. Lively, energetic. " +
                    "Adaptable but needs to express themselves. Argumentative and outspoken. " +
                    "Likes change. Versatile. Busy, sometimes nervous and tense. " +
                    "Gossips. May seem superficial or inconsistent, but is only changeable. " +
                    "Beautiful physically and *mentally.";
            }
            else if (cbCancer.Checked == true)
            {
                Image img = Image.FromFile("cancer.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Moody, emotional. May be shy. Very loving and caring. Pretty/handsome. " +
                    "Excellent partners for life. Protective. Inventive and imaginative. " +
                    "Cautious.Touchy-feely kind of person. Needs love from others. " +
                    "Easily hurt, but sympathetic.";
            }
            else if (cbLeo.Checked == true)
            {
                Image img = Image.FromFile("leo.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Very organized. Need order in their lives - like being in control. " +
                    "Like boundaries. Tend to take over *everything. Bossy. Like to help " +
                    "others. Social and outgoing. Extroverted. Generous, warm-hearted. " +
                    "Sensitive.Creative energy. Full of themselves. Loving. " +
                    "Doing the right thing is important to Leos. Attractive.";
            }
            else if (cbVirgo.Checked == true)
            {
                Image img = Image.FromFile("virgo.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Dominant in relationships. Conservative. Always wants the last word. " +
                    "Argumentative. Worries. Very smart. Dislikes noise and chaos. Eager. " +
                    "Hardworking. Loyal. Beautiful. Easy to talk to. Hard to please. " +
                    "Ha rsh.Practical and very fussy. Often shy. Pessimistic.";
            }
            else if (cbLibra.Checked == true)
            {
                Image img = Image.FromFile("libra.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Nice to everyone they meet. Can't make up their mind. " +
                    "Have own unique appeal. Creative, energetic, and very social. " +
                    "Hates to be alone. Peaceful, generous. Very loving and beautiful. " +
                    "Flirtatious. Give in too easily. Procrastinators. Very gullible.";
            }
            else if (cbScorpio.Checked == true)
            {
                Image img = Image.FromFile("scorpio.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Very energetic. Intelligent. Can be jealous and/or possessive. " +
                    "Hardworking. Great kisser. Can become obsessive or secretive. " +
                    "Holds grudges. Attractive. Determined.Loves being in long " +
                    "relationships. Talkative. Romantic. Can be self-centered at times. " +
                    "Passionate and Emotional.";
            }
            else if (cbSagittarius.Checked == true)
            {
                Image img = Image.FromFile("sagittarius.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Good-natured optimist. Doesn't want to grow up (Peter Pan Syndrome). " +
                    "Indulges self. Boastful. Likes luxuries and gambling. " +
                    "Social and outgoing. Doesn't like responsibilities. Often fantasizes. " +
                    "Impatient. Fun to be around.Having lots of friends. Flirtatious. " +
                    "Doesn't like rules. Sometimes hypocritical.Dislikes being " +
                    "confined - tight spaces or even tight clothes. " +
                    "Doesn't like being doubted. Beautiful inside and out.";
            }
            else if (cbCapricorn.Checked == true)
            {
                Image img = Image.FromFile("capricorn.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Patient and wise. Practical and rigid. Ambitious. " +
                    "Tends to be good-looking. Humorous and *funny. " +
                    "Can be a bit shy and reserved. Often pessimists. " +
                    "Capricorns tend to act before they think and can be unfriendly at " +
                    "times. Hold grudges. Like competition. Get what they want.";
            }
            else if (cbAquarius.Checked == true)
            {
                Image img = Image.FromFile("aquarius.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Optimistic and honest. Sweet personality. Very independent. " +
                    "Can be a bit rebellious. Very stubborn, but original and unique " +
                    "attractive on the inside and out. Eccentric personality.";
            }
            else if (cbPisces.Checked == true)
            {
                Image img = Image.FromFile("pisces.jpg");
                lblPicture.Image = img;
                lblText.Text =
                    "Generous, kind, and thoughtful. Very creative and imaginative. " +
                    "May become secretive and vague. Sensitive. " +
                    "Don't like details Dreamy and unrealistic. " +
                    "Sympathetic and loving. Kind. Unselfish. " +
                    "Good kisser. Beautiful.";
            }    
        }
    }
    


    /* စာလုံးရေ ၁၅၀၀၀ ကျော်နေသည့်အတွက် နောက် post မှာ ဆက်ဖတ်ပါ။ */
  • edited February 2010 Registered Users

    Output


    checkbox15.jpg
    အထက်ကပုံက program ကို run လိုက်ရင် ပထမဆုံး ထွက်လာမဲ့ output ပါ။ အဲဒါကို ကျနော်က ARIES မှာ checked လုပ်လိုက်တယ်။ ပြီးတော့ "ကြည့်မယ်" ဆိုတာကို click လိုက်တယ်။ အဲဒါဆို Aries သမားတွေအတွက် သူ ့ရဲ ့ ရာသီခွင် အကြာင်းနဲ ့ ညာဘက်က ရာသီခွင်စက်၀ုိင်းပုံရဲ ့ အောက်မှာ Aries ရဲ ့ Zodiac Symbol ပုံလေး ပြပါလိမ့်မယ်။ တခြား ရာသီခွင်တွေကို ကြည့်ချင်တယ်ဆိုရင် ခုန ကြည့်ခဲ့တဲ့ Aries ကို unchecked ပြန်လုပ်ပြီးမှ ကိုယ်ကြည့်ချင်တဲ့ တခြား ရာသီခွင်တွေကို ပြန်ကြည့်ပါ။ အောက်မှာ ပုံ(၂)ပုံနဲ ့ ပြထားပါတယ်။

    checkbox16.jpg

    checkbox17.jpg

    How To Works


    ဒီ program က ရာသီခွင် (Zodiac) အကြောင်း ရေးထားတာပါ။ C# မှာ မြန်မာလို သုံးလို ့ရတယ်ဆိုတာလဲ ပြောချင်လို ့ မြန်မာဖောင့်နဲ ့ Button နှစ်ခု ထည့်ထားပါတယ်။ checked box အကြောင်းပဲ ပြောချင်တာရယ်၊ အရမ်းရှည်သွားရင် လေ့လာရတဲ့သူ စိတ်ညစ်သွားမှာစိုးလို ့ဘာမှ မထည့်ထားပါဘူး။ check box နဲ ့ပါတ်သတ်လို ့ တောင် ပြည့်စုံတယ်လို ့ ပြောလို ့ရတဲ့ program မဟုတ်သေးပါဘူး ။ code တွေ ရှည်တာရယ်၊ မြန်မာလိုတွေကော ရေးထားတာရယ်ကြောင့် မသိတဲ့သူတွေဆို ခက်မယ်လို ့ထင်မိကြပါလိမ့်မယ်။ မခက်ပါဘူး။ code ရှည်တယ်ဆိုတာလဲ စာတွေချည်း ရေးထားရလို ့ပါ။ programming logic အနေနဲ ့ဘာမှတောင် ပါတာရယ် မဟုတ်ဘူး။

    • ပထမဆုံး Check Box Controls (၁၂)ရယ်၊ Button နှစ်ခုရယ်၊ Label နှစ်ခုရယ်၊ PictureBox တစ်ခုရယ်ကို အပေါ်ဆုံးမှာ အရင် Declaration လုပ်လိုက်ပါတယ်။
      Check Box Controls (၁၂) အတွက် တစ်ခုချင်းစီအတွက် သူနဲ ့သက်ဆိုင်တဲ့ property တွေ ရေးလို်က်ပါတယ်။ ဒီလိုလေးတွေပေါ့။
              // cbAries
              cbAries = new CheckBox();
              cbAries.ForeColor = Color.Yellow;
              cbAries.Location = new Point(12, 25);
              cbAries.Name = "cbAries";
              cbAries.Text = "ARIES";
              cbAries.UseVisualStyleBackColor = true;
      
      cbAries.Name = "cbAries";
      cbAries.Text = "ARIES";
      ဒီနှစ်ခုကို ကျနော် ပြောချင်ပါတယ်။ ဒီ Label ဆိုတဲ့ Control ရဲ ့ Text ဆိုတာက form ပေါ်မှာ မြင်ရဖို ့အတွက် ရေးထားတာပါ။ ဘာမှ မရေးထားရင်တော့ ဘာမှ မပေါ်ဘူးပေ့ါလေ။ Control ရဲ ့ Name ဆိုတာက ဒီ Control နဲ ့ ပါတ်သတ်တဲ့ အလုပ်ကို လုပ်မယ်ဆိုရင် သုံးဖို ့ပေးထားတာပါ။ Text ကော၊ Name ကောကို နာမည် အတူတူပေးထားလဲ အဆင်ပြေပါတယ်။ ပြဿနာ မရှိပါဘူး။ ကျန်တဲ့ property တွေကလဲ အရင် post တွေမှာ သိပြီးသားဆိုတော့ ဘာမှ ထူးထူူးခြားခြား ပြောစရာ မရှိပါဘူး။

    • ဒုတိယက အလယ်မှာ စာတွေပေါ်နေတဲ့ နေရာက Label Control နဲ ့ ဆွဲထားတာပါ။ ပထမဆုံး user က ဘာမှ မလုပ်ခင် ဒါ ဘာလဲဆိုတာ သိအောင်လို ့ ဘာညာသာရကာ နဲနဲ ရေးထားပါတယ်။ သူ ့ရဲ ့ property တွေ ကြည့်ရအောင်။
              // lblText
              lblText = new Label();
              lblText.BackColor = Color.White;
              lblText.BorderStyle = BorderStyle.Fixed3D;
              lblText.Font = new System.Drawing.Font("Times New Roman", 11.25F);
              lblText.Location = new Point(128, 25);
              lblText.Name = "lblText";
              lblText.Size = new Size(273, 197);
              lblText.TextAlign = ContentAlignment.MiddleCenter;
              lblText.Text = 
                  "Ladies and Gentlemen!!\n" + 
                  "Do you believe fortune telling that " + 
                  "can be called astrology?\n" +
                  "Do you believe that Zodiac influenced " + 
                  "all of people?\n" + 
                  "Here, I showed these Zodiacs for you !!" + 
                  "Don't waste the time!! Hurry up !!";
      
      lblText.Font = new System.Drawing.Font("Times New Roman", 11.25F);
      ဒါက ဘာကို ဆိုုလိုတာလဲဆိုတော့ Visual Studio မှာက Controls တွေရဲ ့ font နဲ ့ပါတ်သတ်လို ့ ပုံမှန် default အနေနဲ ့ Microsoft Sans Serif font ကို သုံးထားပါတယ်။ font size က 8.25 ပါ။ ဒါကို ကျနော်က Times New Roman font နဲ ့ စာဖတ်ရတာ အဆင်ပြေအောင် 11.25 size ကို ပြောင်းလိုက်ပါတယ်။ အဲဒီ့ statement က ဒါကို ဆိုလိုတာပါ။
      lblText.TextAlign = ContentAlignment.MiddleCenter;
      ဒါကတော့ စာကို Center မှာ ပြချင်လို ့အဲလို ရေးထားတာပါ။ ဘာမှ ထူးထူးခြားခြားတော့ မဟုတ်ပါဘူး။ TextAlign နဲ ့ပါတ်သတ်ရင်တော့ (၉) မျိုး ရှိပါတယ်။ TopLeft, TopCenter, TopRight, MiddleLeft, MiddleCenter, MiddleRight, BottomLeft, BottomCenter, BottomRight ဆိုပြီးတော့။

    • ကဲ Button နှစ်ခု လာပါပြီ။ "ကြည့်မယ်" ဆိုတဲ့ Button ရယ်၊ "ပိတ်မယ်" ဆိုတဲ့ Button ရယ်။ ကြည့်မယ် က ကျနော်တို ့ရာသီခွင် တစ်ခုကို checked ပြီးရင် အဲဒါလေးကို နှိပ်ပြီး ကြည့်နိုင်ပါတယ်။ ပိတ်မယ်က ဒီ application ကို ပိတ်ဖို ့အတွက်ပါ။ သူတို ့နဲ ့ သက်ဆိုင်တဲ့ property တွေ အောက်မှာ ကြည့်ရအောင်။ "ကြည့်မယ်" Button ရဲ ့ property ပဲ ပြတော့မယ်နော်။ နှစ်ခုက အတူတူပဲမို ့လို ့။
      // btnDisplay
              btnDisplay = new Button();
              btnDisplay.Location = new Point(128, 234);
              btnDisplay.Name = "btnDisplay";
              btnDisplay.Size = new Size(99, 31);
              btnDisplay.BackColor = Color.Gray;
              btnDisplay.ForeColor = Color.Yellow;
              btnDisplay.TabIndex = 1;
              btnDisplay.Font = new System.Drawing.Font("Zawgyi-One", 9.25F);
              btnDisplay.Text = "ကြည့်မယ်";
              btnDisplay.UseVisualStyleBackColor = false;
              btnDisplay.Click += new System.EventHandler(this.btnDisplay_Click);
      
      btnDisplay.Font = new System.Drawing.Font("Zawgyi-One", 9.25F);
      ဒီမှာလဲ ဘာမှတော့ ပြောစရာ မရှိပါဘူး။ ခုန ပြောသလိုပဲ Visual Studio က ပေးထားတဲ့ Microsoft Sans Serif font အစား Zawgyi-One font ကို ပြောင်းသုံးလိုက်တာပါပဲ။ တစ်ခုပြောစရာ ရှိတာက Visual Studio ထဲမှာ ဒီ code ကို ရိုက်တဲ့အခါ ခု ပေါ်နေသလို
      btnDisplay.Text = "ကြည့်မယ်"; အဲဒီ့ "ကြည့်မယ်" ဆိုတဲ့နေ၇ာမှာ လေးထောင့်တုံးလေးတွေနဲ ့ ပေါ်ပါလိမ့်မယ်။ သဘောက unknown font သဘာမျိုးပေါ့။ ဒါပေမဲ့ output မှာကျ မြန်မာဖောင့်နဲ ့ပေါ်ပါလိမ့်မယ်။ အဲတော့ လေးထောင့်တုံးပုံစံလေးတွေနဲ ့ ဘယ်လို ရိုက်မလဲဆိုတော့ .. ဒီလိုပဲ မှန်းသာရိုက်... မှားနေမယ်ဆိုရင်တော့ Myanmar Font Layout သာဖွင့်ပြီး ရိုက်ပေတော့.. (:1: နောက်တာ) ။ ဒီတော့ Visual Studio မှာ code တွေ ရိုက်လို ့မြန်မာလို တွေ ထည့်ရေးချင်တယ်ဆိုရင်တော့ Visual Studio ရဲ ့ Tools -> Options -> Environment -> Fonts and Colors မှာ ၀င်ပြင်လို ့ရပါတယ်။ VS ရဲ ့ Default font က Courier New ဖြစ်ပါတယ်။ အဲမှာ Zawgyi-One ၀င်သုံးလိုက်ပါ။ သို ့သော် code editor မှာ English fonts တွေ ကြည့်လို ့မကောင်းပါဘူး။ ဒါကြောင့် ကျနော်တော့ မသုံးပါဘူး။ မြန်မာလိုတွေ ရေးဖို ့များတယ်ဆိုရင်တော့ သုံးပါ။ ခဏပေါ့။ ပြီးရင် Default ပြန်ထားလိုက်ပါ။

      ပြီးတော့ "ကြည့်မယ်" ဆိုတာကို click လိုက်ရင် ဘာဖြစ်မလဲဆိုတာကို ထုံးစံအတိုင်း System.EventHandler နဲ ့ handle လုပ်လိုက်ပါတယ်။
      btnDisplay.Click += new System.EventHandler(this.btnDisplay_Click);
      ပြီးတော့မှ အောက်မှ btnDisplay_Click နဲ ့ပါတ်သတ်တာကို သပ်သပ် ပြန်ရေးပါတယ်။ အောက်မှာ ကြည့်ပါ။
      private void btnDisplay_Click(object who, EventArgs ex)
          {
      
              if (cbAries.Checked == true)
              {
                  Image img = Image.FromFile("aries.jpg");
                  lblPicture.Image = img;
                  lblText.Text =
                      "Energetic. Adventurous and spontaneous. Confident and enthusiastic. " +
                      "Fun. Loves a challenge. EXTREMELY impatient. Sometimes selfish. " +
                      "Short fuse.(Easily angered.) Lively, passionate, and sharp wit. " +
                      "Outgoing. Lose interest quickly - easily bored. Egotistical. " +
                      "Courageous and assertive. Tends to be physical and athletic.";
              }
              else if (cbTaurus.Checked == true)
              {
                      // ဘာညာ .. သာရကာ .....
                      // ........................
              }
              // ..........................
              // ..........................
      }
      
      if (cbAries.Checked == true)
      ကဲ အဲမှာဗျာ.. ARIES Check Box ကိုသာ checked လိုက်မယ်ဆိုရင်တဲ့... ဘာလုပ်မလဲ... ဒါတွေလုပ်မယ်ဆိုပြီး ပထမ ပုံကို ညာဘက်က label မှာ တင်လိုက်ပါတယ်။ ပြီးတော့မှ စာကို အလယ်က label မှာ ရေးလိုက်ပါတယ်။
      ပထမဆုံး output မှာ ညာဘက်အပေါ်က ရာသီခွင်စက်၀ုိင်းရဲ ့အောက်မှာ label တစ်ခု ပါပါတယ်။ ဒါပေမဲ့ သူ ့ရဲ ့
      lblPicture.Text = ""; အဲလို ဘာမှ မပေးထားတဲ့အတွက် ဘာမှ မပေါ်ပါဘူး။ ဒါကြောင့် မမြင်ရတာပါ။ Label ဆိုတာက စာရေးဖို ့အတွက်ပဲလေ။ သူမှာ ဘောင်တွေ ဘာတွေ မပါဘူး။ ဒါကြောင့် ဘာစာမှ မရေးလိုက်တော့ မမြင်ရတော့ဘူးပေါ့။ တော်ကြာ မျက်လှည့်ပြတယ် ထင်နေမှာစိုးလို ့။

    • နောက်ထပ် ဘာရှိသေးလဲ။ ကျန်တာတွေကတော့ အရင် post တွေ ဖတ်ပြီးသားဆိုရင် ဘာမှ ပြောစရာ မရှိတော့ပါဘူး။



    ဒါကတော့ ကိုယ့်ရာသီခွင်ပဲ သိပြီး ချစ်ချစ်ရဲ ့ မွေးနေ ့ကို သိပြီး ရာသီခွင်ကို မသိသော သူများအတွက် အထူး ရည်ရွယ်ပါတယ်။ :1:

    • Aries: March 21 - April 20

    • Taurus: April 21 - May 20

    • Gemini: May 21 - June 20

    • Cancer: June 21 - July 20

    • Leo: July 21 - August 20

    • Virgo: August 21 - September 20

    • Libra: September 21 - October 20

    • Scorpio: October 21 - November 20

    • Sagittarius: November 21 - December 20

    • Capricorn: December 21 - January 20

    • Aquarius: January 21 - February 20

    • Pisces: February 21 - March 20




    OK!
    Thanks for reading my posts!!
    See u around, buddy !!
    Have a nice day !!
  • edited February 2010 Registered Users
    Combo Boxes

    Combo Box ဆိုတာ ListBox ထဲက text တွေကို တစ်ခုချင်း ထုတ်ပြသော box တစ်ခု ဖြစ်ပါတယ်။ Combo Box ထဲမှာ items တွေ များစွာ ရှိပါတယ်။ user အနေနဲ ့ သူလိုတဲ့ item တစ်ခုကိုပဲ ဆွဲထုတ်လို ့ရပါတယ်။ ListBox ဆိုတာကတော့ item တွေ အများကြီးကို တစ်ခါတည်း ပြထားပါတယ်။ Combo Box ကတော့ item တွေ အများကြီးထဲက တစ်ခုကိုပဲ ထုတ်ပြမှာပါ။ ဥပမာ ကျနော်က ခု notepad တစ်ခု ဖွင့်လိုက်တယ်။ notepad ရဲ ့ menubar က Format -> Font ကို သွားပြီး ကျနော် လိုချင်တဲ့ font နဲ့ font-size ကို change ဆိုပြီး ဖွင့်လိုက်တယ်။ အဲမှာ မြင်နေရတဲ့ box တွေက combo boxes တွေချည်း ဖြစ်ပါတယ်။ သူ ့မှာ item တွေ ကို List လုပ်ထားတယ် ။ ဒါပေမဲ့ user က တစ်ခုကိုပဲ အသုံးပြုလို ့ ရပါမယ်။ နားလည်လား မသိဘူး ?? ဒါဆို အောက်က ပုံကို လေ့လာကြည့်လိုက်ပါ။
    combobox11.jpg

    ပုံမှာ မြင်နေရတဲ့ font name က Zawgyi-One, font style က Regular, font size က 10, Script က Western အဲဒါတွေအားလုံးဟာ combo boxes တွေချည်းပဲ ဖြစ်ပါတယ်။ Combo Boxes မှာ ရှိနေတဲ့ items တွေထဲက user ရွေးချယ်လိုက်တဲ့ items တွေနဲ ့ ပါတ်သတ်ပြီး ကျနော်တို ့က အလုပ်လုပ်ပေးရပါမယ်။

    Namespace : System.Windows.Forms

    Sample
    using System;
    using System.Windows.Forms;
    using System.Drawing;
    
    public class ComboBox_Sample : Form
    {
        private TextBox textBox1;
        private Button btnAdd;
        private TextBox textBox2;
        private Button btnFind;
        private Button btnShowSelected;
        private Label lblTest;
        private ComboBox comboBox1;
    
        public ComboBox_Sample()
        {
            InitializeComponent();
        }
    
        private void InitializeComponent()
        {
            // textBox1
            textBox1 = new TextBox();
            textBox1.Location = new Point(8, 25);
            textBox1.Size = new Size(230, 20);
            textBox1.Text = "";
            textBox1.Name = "textBox1";
            textBox1.TextAlign = HorizontalAlignment.Right;
            textBox1.TabIndex = 0;
    
            // btnAdd
            btnAdd = new Button();
            btnAdd.Location = new Point(177, 50);
            btnAdd.Size = new Size(60, 24);
            btnAdd.TabIndex = 1;
            btnAdd.Text = "Add";
            btnAdd.TabIndex = 1;
            btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
    
            // textBox2
            textBox2 = new TextBox();
            textBox2.Location = new Point(8, 85);
            textBox2.Size = new Size(230, 20);
            textBox2.Text = "";
            textBox2.Name = "textBox2";
            textBox2.TabIndex = 2;
            textBox2.TextAlign = HorizontalAlignment.Right;
          
            // btnFind
            btnFind = new Button();
            btnFind.Location = new Point(177, 110);
            btnFind.Size = new Size(60, 24);
            btnFind.TabIndex = 2;
            btnFind.Text = "Find";
            btnFind.TabIndex = 3;
            btnFind.Click += new System.EventHandler(this.btnFind_Click);
    
            // lblTest
            lblTest = new Label();
            lblTest.Location = new Point(8, 140);
            lblTest.Size = new Size(230, 20);
            lblTest.Text = "Choose your favourite:";
    
            // ComboBox
            comboBox1 = new ComboBox();
            comboBox1.DropDownWidth = 230;
            comboBox1.Location = new Point(8, 165);
            comboBox1.Size = new Size(230, 20);
            comboBox1.Name = "comboBox1";
            comboBox1.TabIndex = 4;
            comboBox1.Text = "Hamburger";
            comboBox1.Items.AddRange(new object[] {
                            "Hamburger",
                            "Big Mac", 
                            "Filet-O-Fish",
                            "McChicken",
                            "French Fries",
                            "Cheeseburger",
                            "McRib"});
    
            // btnShowSelected
            btnShowSelected = new Button();
            btnShowSelected.Location = new Point(8, 270);
            btnShowSelected.Size = new Size(230, 24);
            btnShowSelected.TabIndex = 5;
            btnShowSelected.Text = "Show Selected Item";
            btnShowSelected.Click += new System.EventHandler(this.btnShowSelected_Click);
    
            // form
            this.ClientSize = new Size(250, 320);
            this.Text = "ComboBox Sample";
            this.MaximizeBox = false;
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                            this.textBox1,
                            this.btnAdd,
                            this.textBox2,
                            this.btnFind,
                            this.btnShowSelected,
                            this.lblTest,
                            this.comboBox1});
        }
    
        private void btnAdd_Click(object sender, System.EventArgs e)
        {
            if (textBox1.Text != "")
            {
                comboBox1.Items.Add(textBox1.Text);
            }
            textBox1.Clear();
        }
    
        private void btnFind_Click(object sender, System.EventArgs e)
        {
            int index = comboBox1.FindString(textBox2.Text);
            comboBox1.SelectedIndex = index;
            textBox2.Clear();
        }
    
        private void btnShowSelected_Click(object sender, System.EventArgs e)
        {
            Object selectedItem = comboBox1.SelectedItem;
            MessageBox.Show("Selected Item Text: " + selectedItem.ToString());
        }
    
        public static void Main()
        {
            Application.Run(new ComboBox_Sample());
        }
    }
    
    Output

    combobox13.jpg
    Fig.5_1

    Fig.5_1 မှာ ကြည့်ပါ။ Choose your favorite: အောက်က Hamburger လို ့ ပေါ်နေတဲ့ box ဟာ Combo Box ဖြစ်ပါတယ်။ ညာဘက်အစွန်က Dropdown Arrow လေးကို click ပြီး သူ ့မှာပါတဲ့ item တွေကို ကြည့်ကြည့်ပါ။ Fig.5_2 မှာ ကြည့်ပါ။ Combo Box ထဲမှာ item (၇) ခု ပါပါတယ်။

    combobox14.jpg
    Fig.5_2


    How To Works

    program မှာ TextBox (၂)၊ Combo Box (၁)၊ Label (၁)၊ Button(3) ခု ပါပါတယ်။
      Add Button နဲ ့ Find Button ရဲ ့ အပေါ်မှာ TextBox နှစ်ခု ထည့်ထားပါတယ်။ သူတို ့နဲ ့ပါတ်သတ်တဲ့ property တွေကတော့ အရင်အတိုင်းပါပဲ။ မရှင်းပြတော့ဘူး။ Find Button အောက်က Choose your favourite: ဆိုတဲ့ စာသားက Label ကို အသုံးပြုထားတာပါ။ အဲဒါလဲ မရှင်းပြတော့ဘူး။ အရင် post တွေမှာ ရှင်းပြပြီးခဲ့ပါပြီ။ ကဲ Add Button ကို ကြည့်ရအောင်။
            // btnAdd
            btnAdd = new Button();
            btnAdd.Location = new Point(177, 50);
            btnAdd.Size = new Size(60, 24);
            btnAdd.TabIndex = 1;
            btnAdd.Text = "Add";
            btnAdd.TabIndex = 1;
            btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
    
    သူ ့ရဲ ့ property တွေကတော့ အထက်မှာ မြင်ရတဲ့အတိုင်း ဘာမှ ထူးထူးခြားခြား မရှိပါဘူး။ Add button က ဘာအလုပ်လုပ်မလဲ ဆိုတော့ Combo Box ထဲမှာ နဂိုရှိပြီးသား items တွေအပြင် ကိုယ်ထပ်ထည့်ချင်တာကို ထပ်ထည့်နိုင်အောင်ပါ။
    btnAdd.Click += new System.EventHandler(this.btnAdd_Click); က ကျနော်တို ့ လိုချင်တာကို လုပ်ပေးပါလိမ့်မယ်။ အောက်မှာ btnAdd_Click နဲ ့ ပါတ်သတ်တဲ့ function ကို ကြည့်ရအောင်။
    private void btnAdd_Click(object sender, System.EventArgs e)
    {
            if (textBox1.Text != "")
            {
                comboBox1.Items.Add(textBox1.Text);
            }
            textBox1.Clear();
    }
    
    comboBox1.Items.Add(textBox1.Text); ဆိုပြီး textBox1 ထဲက စာတွေကို comboBox1 ရဲ ့ Items ထဲကို Add လုပ်လိုက်ပါတယ်။ အဲမှာ
    if (textBox1.Text != "")
    {
    }
    ဆိုပြီး filter လုပ်ထားပါတယ်။ တကယ်လို ့ ကျနော်တို ့က textBox1 ထဲမှာ ဘာမှ မရေးပဲနဲ ့ Add Button ကို click လိုက်ရင် blank space ကြီးပဲ Combo Box ထဲ ၀င်သွားပါလိ့မ်မယ်။ ဒါကြောင့် အဲလို မဖြစ်အောင် if နဲ ့ စစ်ထားပါတယ်။

    textBox1.Clear(); က Item အသစ်တစ်ခုကို combo box ထဲ add ပြီးရင် နောက်တစ်ခုအတွက် အဆင်သင့် ဖြစ်နေအောင် textBox1 ကို clear ပေးထားတာပါ။ Fig.5_3 မှာ ကြည့်ပါ။ Peanut Burger ဆိုပြီး ရေးလိုက်ပါတယ်။ ပြီးရင် Add button ကို click လိုက်ပါ။ Fig.5_4 မှာ ကြည့်ကြည့်ပါအုံး။

    combobox15.jpg
    Fig.5_3

    combobox16.jpg
    Fig.5_4

    Find Button ဘယ်လို အလုပ်လုပ်သလဲ ??
    private void btnFind_Click(object sender, System.EventArgs e)
    {
            int index = comboBox1.FindString(textBox2.Text);
            comboBox1.SelectedIndex = index;
            textBox2.Clear();
    }
    
    မြင်တဲ့အတိုင်းပါပဲ။ ဒီအတိုင်း ကြည့်ရင်တောင် နားလည်မှာပါ။

    ကိုယ့်ဘာသာ စမ်းကြည့်ကြပါ။ Show Select Item ဆိုတာကလဲ လက်ရှိ combo box ထဲမှာ ဘာ Item ၀င်နေလဲဆိုတာကို သိဖို ့ ကြည့်ကြည့်တာပါ။ ကဲ ဒီလောက်ဆို လုံလောက်ပြီ ထင်ပါတယ်။

    Note
    ကျနော် ဆွေးနွေးသမျှ အားလုံးဟာ windows programming မှာ မသုံးမဖြစ် မသိမဖြစ် တွေပါ။ ကျနော် ရေးပြတဲ့ code တွေအပြင် အဲဒါတွေကို ကုုိယ့်ဘာသာ modify လုပ်ကြည့်ကြပါအုံး။ ကျနော့်လဲ ပြန်ပြချင်ပြပေါ့။ code တွေကို တစ်ခုချင်း သေချာ လေ့လာကြည့်ပါ။ ထည့်သုံးထားတဲ့ function တွေလဲ မှတ်ထားပေါ့။ post တွေကို အစဉ်လိုက် ဖတ်ဖို ့မမေ့ပါနဲ ့ ။ ရှေ့မှာ ရှင်းပြီးသားကို နောက် post မှာ ကျနော် ပြန်မရှင်းထားပါဘူး။ ဒါကြောင့်...



    OK!
    Thanks for reading my post!!
    See u around, buddy!!
    Have a nice day !!
  • ackack
    edited February 2010 Registered Users
    Stop Watch Program မှာသုံးဖို့ ....
    Start နှိပ်တာနဲ့ အချိန်စ Run တဲ့ Timer Code လေး ရှင်းပြပါအုံး....
    ကျွန်တော်အသုံးလိုနေလို့ပါ။
    Thanks....
  • edited February 2010 Registered Users
    ack wrote: »
    Stop Watch Program မှာသုံးဖို့ ....
    Start နှိပ်တာနဲ့ အချိန်စ Run တဲ့ Timer Code လေး ရှင်းပြပါအုံး....
    ကျွန်တော်အသုံးလိုနေလို့ပါ။
    Thanks....

    လောလောဆယ်တော့ ကျနော် အဲဒါကို မသိဘူးသေးဘူး... အချိန်ရရင် လိုက်ရှာကြည့််ပေးမယ်လေ.. .. ရရင် ကျနော် ချက်ချင်း တင်လိုက်ပါမယ်..
    ကျနော်လဲ လေ့လာနေဆဲပါ... developer တစ်ယောက် မဟုတ်ပါဘူး.. ဒါပေမဲ့ သိတဲ့သူတွေ ၀င် ရှင်းပြပါလိ်မ့်မယ်.. စိတ်မပူပါနဲ ့...
  • ackack
    edited February 2010 Registered Users
    green leaf wrote: »
    လောလောဆယ်တော့ ကျနော် အဲဒါကို မသိဘူးသေးဘူး... အချိန်ရရင် လိုက်ရှာကြည့််ပေးမယ်လေ.. .. ရရင် ကျနော် ချက်ချင်း တင်လိုက်ပါမယ်..
    ကျနော်လဲ လေ့လာနေဆဲပါ... developer တစ်ယောက် မဟုတ်ပါဘူး.. ဒါပေမဲ့ သိတဲ့သူတွေ ၀င် ရှင်းပြပါလိ်မ့်မယ်.. စိတ်မပူပါနဲ ့...

    Thanks for your reply.:smile:
  • edited February 2010 Administrators
    http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
    

    အဲဒါကို အဆင်ပြေမလားတော့ မသိဘူး။ threading သုံးရမယ်။ loop နဲ့ ပတ်လို့မရဘူး။
  • ackack
    edited February 2010 Registered Users
    saturngod wrote: »
    http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
    
    အဲဒါကို အဆင်ပြေမလားတော့ မသိဘူး။ threading သုံးရမယ်။ loop နဲ့ ပတ်လို့မရဘူး။
    Thanks a lot
Sign In or Register to comment.