2011/11/09

MsgBox (функц) VS MessageBox (класс)

Message box (Мессеж бокс) харилцах цонх нь програмдаа ямар нэгэн мэдээллийг хэрэглэгчдэд өгөх, итгэлтэй байгаа эсэхийг лавшруулан асуухад ашигладаг хамгийн түгээмэл аргуудын нэг билээ.
Би энэ удаад .NET фрэймворк дээрх өөрийн багахан туршлагаасаа хуваалцая. MsgBox болон MessageBox хоёрын ялгааг төдийлөн анзааралгүй програмдаа хольж бичсэнээс эргээд цэгцлэх гэж багагүй цагийг зарцуулсан тул цонхон орчны форм програм хөгжүүлэгч залуус анхаараад авахад илүүдэхгүй болов уу.
MsgBox("Hello there!")
MessageBox.Show("Hello there!")
Програмын хэл бүр хэрэглэгчдэд мэдээлэл өгөх цонх үзүүлэх өөрсдийн функц, класуудтай.
Жишээ нь вэб-д суурилсан програм (web based, rich internet application) бичих бол ихэнхдээ javascriptwindow.alert() эсвэл ямар нэгэн классын alert() гэсэн аргыг дуудах нь элбэг.
Харин дэсктоп-д суурилсан програмын (desktop application) хувьд .NET фрэймворк бол Msgbox.show() эсвэл MessageBoxShow() харин Oracle-н Java дээр бичиж байгаа бол ихэнхдээ JOptionPane класыын showMessageDialog функцыг дууддаг.

Мэдээллийн технологийн үг хэллэгийг монгол хэл рүү нутагшуулахад төвөгтэй байдаг гэдэгтээ та санал нийлэх биз ээ. Зарим англи хэл дээрх нэр томъёог дуудлагаар нь галигчилж, ард нь дугуйн хаалтанд англи хэл дээрх нэрийг нь бичлээ. Нэмэлт мэдээлэл Google-с хайхаар бол монголоор хайснаас англиар хайсан нь илүү үр дүнтэй.

Ингээд үндсэн хэсэгтээ оръё. Анх оюутан байхаасаа л мэдээллэх цонх ямар функцээр дуудах вэ гэвэл "Мессеж боксын шоу" гэээд цээжилчихсэн болохоор яг ямар синтаксаар бичдэгээ төдийлөн анзаардаггүй байлаа.

VB.NET (VIsual Basic .NET)
VB.NET хэл дээр мэдээллэх цонхыг 2 аргаар дуудаж болно.

1. MsgBox - функц
Microsoft.VisualBasic сангийн нийтийн хандалттай, статик функц. Хэрэглэхэд маш хялбар, нэр нь хүртэл богинохон 6 тэмдэгттэй миний ашиглах дуртай функц.

2. MessageBox - класс
.NET-н анхны классуудын нэг. Синтаксын хувьд MsgBox-с бага зэрэг ялгаатай бичигддэг. 10 тэмдэгттэй.


MsgBox - функц (Function)

MsgBox функцыг дуудахад мэдээлэх цонх үзүүлж, хэрэглэгчийг товч дартал програм хүлээлгийн горимд байна. Ямар товч дарснаас шалтгаалж Integer төрөлтэй бүхэл тоон утга буцаадаг.
Хамгийн ихдээ Yes, No, Cancel эсвэл Abort, retry, Ignore гэсэн 3 товч үзүүлж болно. Гэхдээ хэрэв Help товч нэмсэн бол нийт 4-г үзүүлж болно.

Синтакс (Syntax):
MsgBox(prompt[, buttons] [, title]эсвэл
IntegerVariable = MsgBox(prompt[, buttons] [, title])
MsgBox функц нь доорх хэсгүүдтэй:

Хэсэг
Тайлбар
prompt
Зайлшгүй. Энд бичигдэх String тэмдэгтүүд мэдээллэх цонхны товчны дээр харагдана. Хэрэглэсэн тэмдэгтүүдийн өргөнөөс шалгтаалж хамгийн ихдээ ойролцоогоор 1024 тэмдэгт дүрсэлдэг.
buttons
Сонголттой. Хэвлэгдсэн товчлууруудын тоон утгуудын нийлбэрийг илэрхийлсэн тоо байна. Үүнд: цонхны мэдэлэх хөрөг зураг (icon), товчнуудын төрөл, загвар, гараас enter дарахад идэвхжэх үндсэн товч зэрэг орно. Хэрэв энэ хэсгийг орхивол зөвхөн OK товч харуулна, энэ нь 0 гэсэн үг. Товчнуудын тухай доор дэлгэрэнгүй бий.
title
 Мөн л сонголттой. Мэдээллэх цонхны гарчгыг илэрхийлсэн тэмдэгтүүдийн дараалал. Хэрэв орхивол аппликэйшны нэр энд харагдана.

Ер нь дээрх 3 хэсгийн buttons, title утгуудыг хангаж өгч байх нь тохиромжтой байдаг. Ядаж мэдээллэх цонх нь юу мэдээллэж байгаагаа гарчиг дээрээ харуулж байх хэрэгтэй. User experience буюу хэрэглэгчид ашиглахад хялбар энгийн програм бичиж сурах нь эндээс эхэлдэг гэж би боддог. Ашиглахад хялбар програм бичиж сурахын тулд одоо ашиглаж байгаа програмуудаа сайтар ажиглаж, хэрэглэж, тогтоож байж сая бүх хүмүүст биш юм аа гэхэд ядаж тэдний 80%-д нь энгийн харагдах дизайн бүтээх дадлыг олж авч чадна. 
Туршлага бас дахин туршлага...

Buttons аргумент

Buttons аргумент нь 5 бүлэгт хуваагдана. Эхний бүлэг нь товчлуурын тоо, төрлийг илэрхийлсэн  (0-5) хүртэлх тоон утга, хоёр дахь бүлэг нь хөрөг зураг (icon)-г илэрхийлсэн (16, 32, 48, 64) гэсэн тоон утга, гуравдугаар бүлэг нь аль товч нь үндсэн товч (enter дарахад сонгогдох) гэдгийг илэрхийлсэн (0, 256, 512, 768)  гэсэн тоон утга,  дөрөвдүгээр бүлэг нь өөр програмд шилжих боломжтой эсэхийг (0, 4096) гэсэн тоон утгууд, тавдугаар бүлэг нь тусгай тохиолдолд хэрэглэгддэг. Эдгээр утгууд тус бүрийг нийтэд нь нэмэж мэдээллэх цонхны дизайн бүрэлдэнэ.

Түүнчлэн заавал тоон утгууд бичилгүйгээр сонгодог "vb" тогтмолууд болон, .NET-н "MsgBoxSyle" тогтмолууд мөн хэрэглэхэд асуудалгүй. "vb" тогтмолууд нь Visual Basic хэлний хуучин хувилбаруудад хэрэглэгдэж байсан одоо ч гэсэн .NET-д ашиглаж болно. Гэхдээ .NET-д "MsgBoxSyle"-г  шинээр оруулж ирсэн. Үнэндээ ямар ч ялгаагүй учраас та өөрийн дураар сонгох боломжтой.

 1-р бүлэг
Ямар товч харуулахыг тодорхойлно.
Тогтмол
Утга
Тайлбар
vbOKOnly
- эсвэл -
MsgBoxStyle.OKOnly
0
Зөвхөн OK товч харуулна.
vbOKCancel
- эсвэл -
MsgBoxStyle.OKCancel
1
OK болон Cancel товчнууд харуулна.
vbAbortRetryIgnore
- эсвэл -
MsgBoxStyle.AbortRetryIgnore
2
Abort, Retry болон Ignore товчнууд харуулна.
vbYesNoCancel
- эсвэл -
MsgBoxStyle.YesNoCancel
3
Yes, No болон Cancel товчнууд харуулна.
vbYesNo
- эсвэл -
MsgBoxStyle.YesNo
4
Yes болон No товчнууд харуулна.
vbRetryCancel
- эсвэл -
MsgBoxStyle.RetryCancel
5
Retry болон Cancelтовчнууд харуулна.
www.jagaarj.cdeq.mn
2-р бүлэг
Ямар хөрөг зураг (icon) харуулахыг тодорхойлно.

Тогтмол
Утга
Тайлбар
Icon
vbCritical
- эсвэл -
MsgBoxStyle.Critical
16
Critical Message харуулна.
vbQuestion
- эсвэл -
MsgBoxStyle.Question
32
Warning Query (асуултын тэмдэг) харуулна.
vbExclamation
- эсвэл -
MsgBoxStyle.Exclamation
48
Warning Message iхаруулна.
vbInformation
- эсвэл -
MsgBoxStyle.Information
64
Information Message харуулна.


3-р бүлэг
Аль товч үндсэн товч (enter дарахад идэвхжих )болохыг тодорхойлно.

Тогтмол
Утга
Тайлбар
vbDefaultButton1
- эсвэл -
MsgBoxStyle.DefaultButton1
0
Анхны товч үндсэн товч.
vbDefaultButton2
- эсвэл -
MsgBoxStyle.DefaultButton2
256
Дараагийн товч үндсэн товч.
vbDefaultButton3
- эсвэл -
MsgBoxStyle.DefaultButton3
512
Гурав дахь товч үндсэн товч.
vbDefaultButton4
- эсвэл -
MsgBoxStyle.DefaultButton4
768
Дөрөв товч үндсэн товч. (зөвхөн Help товч нэмсэн үед).


4-р бүлэг
Мэдээллэх цонх гарцаагүй байх эсэхийг тодорхойлно. Ө.х та үндсэн (application modal)-г сонгоё гэвэл энэ хэсэгт утга өгөх хэрэггүй. Хэрвээ "system modal" -гэж сонговол WIndows бусад нээлттэй програмыг сонгох боломжгүйгээр зөвхөн таны цонхонд хариу хүлээх болно.

Тогтмол
Утга
Тайлбар
vbApplicationModal
- эсвэл -
MsgBoxStyle.ApplicationModal
0
Апликэйшн баймж (Application modal); хэрэглэгч нээгдсэн цонхонд хариу өгсний дараагаа апликэйшнийг үргэлжүүлж ажиллуулна.
vbSystemModal
- эсвэл -
MsgBoxStyle.SystemModal
4096
Системийн баймж (System modal); хэрэглэгч нээгдсэн цонхонд хариу өгөхөөс нааш бусад апликэйшнийг үргэлжүүлж ажиллуулах боломжгүй.


5-р бүлэг
Мэдээллэх цонх гарцаагүй байх эсэхийг тодорхойлно. Ө.х та үндсэн (application modal)-г сонгоё гэвэл энэ хэсэгт утга өгөх хэрэггүй

Тогтмол
Утга
Тайлбар
vbMsgBoxHelpButton
- эсвэл -
MsgBoxStyle.MsgBoxHelpButton
16384
Тусламжийн товч нэмнэ.

vbMsgBoxSetForeground
- эсвэл -
MsgBoxStyle.MsgBoxSetForeground
65536
Мэдээллэх цонхыг нүүрний цонхоор (foreground ) тодорхойлно.

vbMsgBoxRight
- эсвэл -
MsgBoxStyle.MsgBoxRight
524288
Үзүүлэх үндсэн текст баруун тийшээ хэвжүүлэгдэнэ.
vbMsgBoxRtlReading
- эсвэл -
MsgBoxStyle.MsgBoxRtlReading
1048576
 Үзүүлэх үндсэн текст баруунаас зүүн тийшээ уншигдахаар хэвжүүлэгдэнэ.(араб, хэбрив)

www.jagaarj.cdeq.mn
Утга шалгах
Хэрэглэгчийг эдгээр олон товчлууруудаас алийг нь дарсныг мэдэхийн тулд MsgBox функцын буцаах утгыг харьцуулж шалгаснаар мэднэ. Буцаах утга нь тоон утга, текстэн тогтмолууд, vb тогтмолуудын аль нь ч байсан болно.

Тогтмол
Утга
Тайлбар
vbOK
-эсвэл -
MsgBoxResult.OK
1
OK товч дарагдсан
vbCancel
-эсвэл -
MsgBoxResult.Cancel
2
Cancel товч дарагдсан
vbAbort
-эсвэл -
MsgBoxResult.Abort
3
Abort товч дарагдсан
vbRetry
-эсвэл -
MsgBoxResult.Retry
4
Retry товч дарагдсан
vbIgnore
-эсвэл -
MsgBoxResult.Ignore
5
Ignore товч дарагдсан
vbYes
-эсвэл -
MsgBoxResult.Yes
6
Yes товч дарагдсан
vbNo
-эсвэл -
MsgBoxResult.No
7
No товч дарагдсан
 

Жишээ код:

Код/Илэрхийлэл:                                                                                                                             
 
MsgBox("Hello there!")
                       
 Ажиллагаа:

  
Хамгийн энгийн хэлбэр.
 
Код/Илэрхийлэл:                                                                                                                                     

MsgBox("The Last Name field must not be blank.",  vbExclamation+vbOKOnly, "Last Name")
                       
 Ажиллагаа:


vbExclamation анхааруулга өгөх зурагтай, OK товчлууртай. Мөн товчлууруудын тоон утгын нийлбэрийг шууд бичиж болно. Ж/нь:
MsgBox("The Last Name field must not be blank.", 48, 
_"Last Name")

Код/Илэрхийлэл:     

MsgBox("A bad database error has occurred.", vbCritical,  _"UpdateCustomerTable")
 
 Ажиллагаа: 
 
Тоон утгын оронд дээр хэлсэнчлэн vbCritical  гэсэн тогтмолыг ашиглаж доорх улаан icon-г харуулж болно.
Энэ төрлийн алдааг өгөгдлийн санд холбох үед, буруу өгөгдөл оруулсан үед харуулахад тохиромжтой. 

Код/Илэрхийлэл:   
Хэрэглэгч ямар товч дарсныг мэдэхдээ ямар нэгэн бүхэл тоон хувьсагч зарлана.


Dim intResponse As Integer
intResponse = MsgBox("Are you sure you want to quit?", _
                     vbYesNo + vbQuestion, _
                     "Quit")

If intResponse = vbYes Then
    ' тийм гэвэл, программыг хаах ямар нэгэн код жишээ нь: "Me.Close"
End If     

 Ажиллагаа:


Тоон утгын оронд тогтмол бичвэр утгуудыг ашиглавал илүү ойлгомжтой харагддаг
Жишээ нь:
intResponse = MsgBox("Are you sure you want to quit?", _
                     vbYesNo + vbQuestion, _
                     "Quit")
бол доорхоос илүү ойлгомжтой харагдаж байна.

intResponse = MsgBox("Are you sure you want to quit?", 36, "Quit")
If intResponse = vbYes Then

гэх нь доорхоос мөн л илүү хялбар.

If intResponse = 6 Then

Түүнчлэн хувьсагч зарлахгүйгээр шууд логик илэрхийлэл дотор шалгаж болно. Жишээ нь:

If MsgBox("Are you sure you want to quit?", _
          vbYesNo + vbQuestion, _
          "Quit")= vbYes Then
    ' тийм гэвэл, программыг хаах ямар нэгэн код жишээ нь: "Me.Close"
End If   

Код/Илэрхийлэл:  
vbDefaultButton2 тогтмол нь гараас enter дарахад шууд 2 дахь товчыг ажиллуулах сонголт юм. Жишээ нь:

Dim intResponse As Integer 
intResponse = MsgBox("Are you sure you want to delete all of the rows " _
                   & "in the Customer table?", _
                     vbYesNo + vbQuestion + vbDefaultButton2, _
                     "Delete") 
If intResponse = vbYes Then
' тийм гэвэл, программыг хаах ямар нэгэн код жишээ нь: "Me.Close"
End If   

 Ажиллагаа:

           
Доорх жишээ VS project-нь дээрх бүх MsgBox жишээнүүдийг багтаасан. Visual Studio дээр Open Project гэж нээгээд F5 (Debug) хийж ажилуулаарай.



MsgBox функцын жишээнүүдийн VB.NET project-г эх кодын хамт татах.

 MessageBox - класс (Class)

MsgBox функцын бүхийл үйлдлийг хийх боломжтой өөр нэгэн ойлголт бол MessageBox класс. MessageBox класс өөртөө дахин тодорхойлогдсон Swow аргын тусламжтайгаар өөр өөр параметрын утгуудыг авч чадна. MsgBox функцийн аргумент, байрлалаас ялгаатай тул аль нэгийг нь сонгож хэрэглэж занших зүйтэй.

MessageBox.Show - Арга


Ж/нь: MessageBox.Show("Hello World!")
[DialogResult = ] MessageBox.Show([window ,]
                                   prompt
                                  [, caption]
                                  [, MessageBoxButtons]
                                  [, MessageBoxIcon]
                                 [, MessageBoxDefaultButton]
                                  [, MessageBoxOptions])    
Ж/нь: MessageBox.Show("Hello World!")

www.jagaarj.cdeq.mn
Show аргын аргументууд:

window

Мэдээллэх цонх буюу хамгийн урд харагдах цонх. "Me" гэвэл идэвхтэй байгаа форм руу заана. Аргументгүй дуудаж болно.
prompt

Мэдээллэх цонхоны харагдах текст. Зайлшгүй дуудах ёстой аргумент.
caption
Мэдээллэх цонхны гарчиг. Хэрэв аргумент өгөөгүй бол апликэйшны нэрийг харуулна.
MessageBoxButtons
Мэдээллэх цонхон дээр ямар товч харагдахыг үзүүлнэ.
Боломжит утгууд:
  • MessageBoxButtons.AbortRetryIgnore (Abort, Retry ба Ignore товчнуудыг харуулна)
  • MessageBoxButtons.OK (OK товчыг харуулна)
  • MessageBoxButtons.OKCancel (OK болон Cancel товчнуудыг харуулна)
  • MessageBoxButtons.RetryCancel (Retry болон  Cancel товчнуудыг харуулна)
  • MessageBoxButtons.YesNo (Yes болон No товчнуудыг харуулна)
  • MessageBoxButtons.YesNoCancel (Yes, No, ба Cancel товчнуудыг харуулна)
MessageBoxIcon
Мэдээллэх цонхон дээр ямар зураг харагдахыг үзүүлнэ. Боломжит утгууд:
Утгууд
Зураг(Icon)
MessageBoxIcon.Error
- эсвэл -
MessageBoxIcon.Hand
- эсвэл -
MessageBoxIcon.Stop

MessageBoxIcon.Question

MessageBoxIcon.Exclamation
- эсвэл -
MessageBoxIcon.Warning

MessageBoxIcon.Asterisk
- эсвэл -
MessageBoxIcon.Information

MessageBoxIcon.None

(хоосон)
MessageBoxDefaultButton
Мэдээллэх цонхны үндсэн товч (enter дарахад). Боломжит утгууд:
·         MessageBoxDefaultButton.Button1 (1-р товч бол  үндсэн товч)
·         MessageBoxDefaultButton.Button2 (2-р товч бол  үндсэн товч)
·         MessageBoxDefaultButton.Button3 (3-р товч бол  үндсэн товч)
MessageBoxOptions
Тусгай нэмэлт боломжууд.  
Боломжит утгууд:
·         MessageBoxOptions.DefaultDesktopOnly (Идэвхтэй байгаа ажлын дэлгэц дээр харуулна)
·         MessageBoxOptions.RightAlign (Харуулах текстыг баруун тийш нь хэвжүүлнэ)
·         MessageBoxOptions.RtlReading (Баруунаас зүүн тийш унших горимд хэвжүүлнэ)
·         MessageBoxOptions.ServiceNotification (Идэвхтэй байгаа ажлын дэлгэц дээр харуулна. Хэрэглэгч нэвтрээгүй байсан ч хамаагүй)


MessageBox -н буцаах утга нь DialogResult (Integer) төрөлтэй. DialogResult -н боломжит утгууд:
  
Утга
Тайлбар
DialogResult.OK
OK товч дарагдсан
DialogResult.Cancel
Cancel товч дарагдсан
DialogResult.Abort
Abort товч дарагдсан
DialogResult.Retry
Retry товч дарагдсан
DialogResult.Ignore
Ignore товч дарагдсан
DialogResult.Yes
Yes товч дарагдсан
DialogResult.No
No товч дарагдсан
DialogResult.None
Мэдээллэх цонхноос хариу ирээгүй. Ө.х хаагдаагүй байна гэсэн үг.
 
www.jagaarj.cdeq.mn
 Жишээ MessageBox кодууд ажиллагааны үеийн зургийн хамт:
  
Statement
MessageBox.Show("Hello there!")


MessageBox.Show _
    ("The Last Name field must not be blank.",  _
     "Last name", _
     MessageBoxButtons.OK, _
     MessageBoxIcon.Exclamation)

MessageBox.Show _
    ("A bad database error has occurred.", _
     "UpdateCustomerTable", _
     MessageBoxButtons.OK, _
     MessageBoxIcon.Error)
  
Dim intResponse As DialogResult

intResponse = MessageBox.Show _
                ("Are you sure you want to quit?", _
                 "Quit", _
                 MessageBoxButtons.YesNo, _
                 MessageBoxIcon.Question)

If intResponse = DialogResult.Yes Then
    ' програмыг дуусгах
End If
  
Dim intResponse As DialogResult

intResponse = MessageBox.Show _
               ("Are you sure you want to " & _
                "delete all of the rows " & _
                "in the Customer table?", _
                "Delete", _
                MessageBoxButtons.YesNo, _
                MessageBoxIcon.Question, _
                MessageBoxDefaultButton.Button2)

If intResponse = DialogResult.Yes Then
    ' мөр устгах ...
End If




Дээрх MessageBox классын жишээнүүдийн VB.NET project-г эх кодын хамт татах.


Мөн C# (C Sharp), C++ (C plus plus) дээр синтаксын бага зэрэг ялгааг эс тооцвол MessageBox классыг ашиглахдаа дээрх жишээнүүдтэй ойролцоо аргаар дуудна.

[C#]
protected void button1_Click(object sender, System.EventArgs e) {
   if(textBox1.Text == "") {
      MessageBox.Show("You must enter a name.", "Name Entry Error",
         MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
   }
   else {
      // хэрэглэгч өгөгдөл оруулсан бол энд бичсэн код ажиллана.
   }
}

[C++]
protected:
 void button1_Click(Object* /*sender*/, System::EventArgs* /*e*/) {
    if(textBox1->Text->Equals(S"")) {
       MessageBox::Show(S"You must enter a name.", S"Name Entry Error",
          MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
    }
    else {
       // хэрэглэгч өгөгдөл оруулсан бол энд бичсэн код ажиллана.
    }
 }

Зарим жишээ кодыг msdn-с авч сийрүүлэв.

4 comments:

  1. aayaya medmer um baina,cain oilgodguie

    ReplyDelete
  2. Hi G.G? Энийг манай мэрэгжлийнхэн л сайн ойлгоно доо. Намайг IT-аар анх хэлд орж сурч байхад яг ийм мэдээлэл монголоор байдаггүй, хэл ус маань ч тааруу байсныг хэлэх үү дэмий л гадныхны тайлбарласныг уншаад хагас дутуу ойлголт авч байж билээ.

    ReplyDelete
  3. Anonymous2/8/12 17:41

    Bi law oilgoloo mash ih bayarlalaa tsag zav gargaj hicheel oruulsand :D

    ReplyDelete