วันอังคารที่ 25 พฤศจิกายน พ.ศ. 2551

Apache เพิ่ม Services และ uninstall services

View Help apache with :
>Apache.exe /?


Install Apache as Services
>apache.exe -n "Apache Web Server (Test)" -k install
-n คือชื่อที่จะเห็น ใน Services ของ Windows

สามารถ ลงได้ หลาย Service เช่น
apache.exe -n "Apache2(Test)" -k install
apache.exe -n "Apache2(Test 2)" -k install
apache.exe -n "Apache2(Test 3)" -k install
จะเห็นว่ามี 3 Services เมื่อ เปิด หน้าต่าง Services ใน Admin Tools
แต่ทั้ง สาม จะมี property ว่า เป็น .exe ตัวเดียวกัน
สามารถ แยก รันได้ อิสระ แต่มีปัญหาว่า มันใช้ port 80 เหมือนกัน มันเลย
รัน ให้พร้อมกันจริงๆไม่ได้ ในตอนนี้

apache.exe -k uninstall -n "Apache Web Server"
-n คือชื่อ

จาก ทั้ง 3 services ที่เห็น จะสามารถ uninstall ทั้ง 3 ได้ โดย
apache.exe -n "Apache2(Test)" -k uninstall
apache.exe -n "Apache2(Test 2)" -k uninstall
apache.exe -n "Apache2(Test 3)" -k uninstall

mysql and mysqladmin

connect database
mysql.exe --user=myuser --pass=mypassword --host=myhost.com
mysql.exe --user=myuser --pass=mypassword --host=localhost
mysql.exe --user=myuser --pass=mypassword --host=127.0.0.1

connect database at localhost
mysql.exe

query data
>show databases
>use mydatabase
>show tables
>select count(*) from table1

mysql is active status
mysqladmin.exe ping ----- view status of mysql at localhost
mysqladmin --host=192.168.0.10 --user=root --pass=mmppst ping
mysqladmin --host=myhostname --user=root --pass=mmppst ping

show current mysql server variable (with path )
mysqladmin --host=myhostname.com --user=root --pass=mmppst variables
mysqladmin --host=myhostname.com --user=root --pass=mmppst variables more

shutdown mysql server
mysqladmin --host=myhostname.com --user=root --pass=mmppst shutdown

view version
mysqladmin.exe --host=myhostname.com --user=root --pass=mmppst version

วันศุกร์ที่ 21 พฤศจิกายน พ.ศ. 2551

Macross Frontier ( Cartoon )

ดู มาครอส มาตั้งแต่เด็กมากๆ ชอบๆ

มาหาใน youtube หาแบบเก่าไม่เจอเลย

เจอแต่แบบใหม่ๆ แบบนี้ครับ



Macross Frontier Ep 1 P1





Ep

วันพุธที่ 19 พฤศจิกายน พ.ศ. 2551

เปลี่ยน port mysql ใน AppServ

ในที่นี้ เนื่องจาก ติดตั้ง mysql 2 instance บนเครื่องเดียวกัน
และ มีการ ใช้ port ชนกันจึงต้องเปลี่ยน ที่ ตัวหนึ่้ง
( หลังจาก มีการเปลี่ยน port ของ apache web server ไปแล้ว )
โดยให้ instance ตัวหนึ่ง ใช้ port 3306 ปกติ
และอีกตัว ใช้ port 3307

ต้องการเปลี่ยน port ก็ แก้โดย
C:\AppServ\MySQL\my.ini

เปลี่ยน section
[client]
port=3306

ให้กลายเป็น
[client]
port=3307

และต้องเปลี่ยน phpMyAdmin อีกให้ มองเห็นตัวนี้ รวมทั้ง เมื่อจะติดต่อด้วย php
ต้องเรียกด้วย
$link = mysql_connect('127.0.0.1:3307', 'mysql_user', 'mysql_password');
หรือ
$link = mysql_connect('example.com:3307', 'mysql_user', 'mysql_password');


แก้ไข ที่ phpMyAdmin ดังนี้
C:\AppServ\www\phpMyAdmin
config.inc.php แก้ไข จาก

cfg['Servers'][$i]['port'] = '';

ให้เป็น
cfg['Servers'][$i]['port'] = '3307';

แล้ว ลอง start mysql ใหม่
และ start phpmyadmin ใหม่ จาก browser

ถ้าทำการเปลี่ยน port ของ apache ต้อง restart apache ใหม่ด้วยครับ

วันพฤหัสบดีที่ 30 ตุลาคม พ.ศ. 2551

python py2exe

โปรแกรม สำหรับ convert python ไปเป็น exe ครับ
http://www.py2exe.org/
http://www.py2exe.org/index.cgi/Tutorial

วันอังคารที่ 28 ตุลาคม พ.ศ. 2551

Curl on Win Without Compile PHP

http://curl.phptrack.com/forum/viewtopic.php?t=52

CURL , php

CURL หรือ คือคำตอบสุดท้ายสำหรับ http client application บน php??
http://www.phpzealots.com/node/98

PHP/CURL -- using libcurl with PHP
http://curl.haxx.se/libcurl/php/

Send SMS
http://www.bytemycode.com/snippets/snippet/647/

http://www.narisa.com/forums/index.php?showtopic=17347
http://www.narisa.com/forums/index.php?showtopic=17347

AT Command with thai mobile
http://www.electoday.com/cgi-bin/yabb2/YaBB.pl?num=1220496993/6

AT Command (Thai)
http://www.thaihosttalk.com/th1/index.php?topic=1718.0
http://ipats.exteen.com/20061213/at-command
http://www.silaresearch.com/example/zgr64sms.txt
http://www.narisa.com/forums/index.php?showtopic=18009
http://www.narisa.com/forums/index.php?showtopic=25610
http://www.pantip.com/tech/electronics/topic/EM2634351/EM2634351.html
http://www.narisa.com/forums/index.php?showtopic=17347
http://www.electoday.com/cgi-bin/yabb2/YaBB.pl?num=1220536963
http://www.wara.com/modules.php?name=News&file=article&sid=258
http://www.sourcecode.in.th/wbread.php?no=1400
http://learners.in.th/blog/samanmit/150789

Summary of AT Command (Thai )
http://pongpansak.ofthai.com/forums/index.php?topic=10.0


AT Command + VB + Serial Port (THai)
http://www.greatfriends.biz/webboards/msg.asp?b=SURREALIST&id=49990

AT Command + Nokia ( With Hyper terminal )
http://wiki.forum.nokia.com/index.php/AT_Commands

SMS Package from DTAC
http://vas.dtac.co.th/th/smspackage.htm

Extend AT Command Set
http://www.modem.com/general/extendat.html
http://www.activxperts.com/activcomport/nokia_gsm_at/

SMS
http://en.wikipedia.org/wiki/Short_message_service_center
http://en.wikipedia.org/wiki/SMS_gateways

Other
http://pear.php.net/package/Net_SMPP
http://www.smsforum.net/

วันจันทร์ที่ 8 กันยายน พ.ศ. 2551

เรียน ASP.net2008

== วันที่ 8 กันยา 2551 เช้า ==
จดคำบรรยาย โดย ฐิติพงศ์ สำราญวานิช

=== Set Property ของ Master Page ===
* ตัวอย่าง การ เซ็ต Propert ของ Master Page
* และ ให้เซ็ตค่า เฉพาะ โหลดครั้งแรก

If Not Me.IsPostBack Then
Me.Title = "Sign Up"
CType(Me.Master.FindControl("lbHeader"), Label).Text = "Sign Up"
End If


=== Me.IsPostBack ===
* และ ให้เซ็ตค่า เฉพาะ โหลดครั้งแร
* ถ้ามี user กดปุ่ม จะไม่ set ค่า , ไม่เข้า If

If Not Me.IsPostBack Then
...
End If


=== Partial ===
แยกแบ่งระหว่าง Designer กับ Source Code จริงๆที่เราเขียน
ที่ GEnerate ไม่ต้องแตะต้อง

=== Namespace ===
เช่น

เป็นกาจัดหมวดหมู่ย่อยๆลงไป เพื่อเรียกใช้ง่าย
Public Partial Class Form1UI
Inherites System.Web.UI.Page


=== Sub , Function ===

เรียกใน VB.NET เรียก Method ,
เป็นคำ ตามแบบ ของ OOP

=== Type Object ===
* เป็น BaseClass ของ OOP
* ทุกๆตัว จะ Inherit มาจาก Object

=== Event Handler ===

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
...
End Sub

จะเห็นว่า Handles Me.Load นั่นคือ ตัวที่ระบุว่า Method นี้ รองรับ Event Load


=== การส่งผ่าน Parameter แบบ Object ของ Object ===

VB.NET เป็น StrongType ต้องระบุ Type
เวลาเรา Inherit จาก Class A ไปเป็น B หรือจาก B ไปเ็ป็น C

ถ้า TypeA Inherit เป็น TypeB
ถ้า TypeB Inherit เป็น TypeC
ถ้า TypeA มี 3 Method , TypeB มี 7 Method
ถ้า Dim a As TypeA แล้ว a จะเก็บ Object ของ TypeB , TypeC ได้
เช่น Dim b As TypeB
a = b ได้ ( แต่ b = a ไม่ได้ )
เป็นเรื่องของ Polymorphism

ข้อมูลนั้นจริงๆ จะเป็น Object TypeB ที่มี 7 Method
แต่ Interface ภายนอกจะเป็น เห็นแค่ Method ของ TypeA คือเห็นแค่ 3 Method
ไม่สามารถ มองเห็น Method ที่เพิ่มมาของ TypeB ได้

ใช้ a.MethodOfTypeB ไม่ได้
แต่ใช้
a.MethodOfTypeA ได้

การแปลงกลับไปเป็น TypeB ทำโดย
Dim bx As TypeB
bx = CType(a,TypeB) แปลงกลับ ทำให้ bx มี 7 Method เหมือนเดิม ได้
แล้วจะใช้ bx.MethodOfTypeB ได้

เป็นการเปลี่ยน Interface หรือเหมือนกับ เปลี่ยนกรอบ

ถ้า Object จริงๆเป็น a แล้วจะเปลี่ยนเป็น เป็น B อย่างนี้ไม่ได้




=== สิ่งที่ FindControl Method Return ค่ามา มี Typeเป็น อะไร ===

ทุก Web Control จะ Inherit มาจาก Class เดียวกัน ชื่อว่า
System.Web.UI.Control
แต่การจะ Cast เป็น อะไรต้อง รู้ Typeจริงๆของมัน

เช่น Object เป็น label และ Cast เป็น TextBox จะ Error ขณะรันทาม

NOTE : น่าจะเรียกว่า Late-Binding


=== Sender Parameter ===

* Sender As Object

เราต้องรู้ เองว่า Sender มี Type เป็นอะไร
เพื่อจะ Casting เพื่อเปลี่ยน เพื่อให้เห็น Method มากขึ้น

=== Type Casting ===

ใน OOP การเีปลี่ยน Type เรียกว่า Type Casting ปกติไม่เรียก Convert
แต่ .NET ใช้ คำว่า Convert

เรามักใช้ Casting เยอะ



=== Page Load , Master , Content ===
* Page Load จะทำทั้งคู่
* หน้า Content จะทำก่อน Master จะทำทีหลัง
* ทดลองโดยใช้ Page Break ใน Debug
* ดังนั้นหากต้องการ ให้ทุก หน้าแสดง ชื่อ Application เหมือนกัน จึงทำโดย ใส่โค้ด ดังนี้ ใน Page_Load ของ Master Page


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Page.Title = "ระบบงาน ABC :" & Page.Title
End Sub

== วันที่ 8 กันยา 2551 บ่าย ==

=== Web Server Control ===
ควรใช้ Web Server Control
เท่าที่จะทำได้ เพื่อให้ง่าย แทนการใช้ HTML ธรรมดา
เพราะจะควบคุมได้ง่ายกว่า และ แก้ไขง่ายกว่า

==== TextBox ====
===== view state =====
เ ซ็ตที่ Page Property ถ้า กำหนด
View State == false
จะทำให้ไม่มีการจำค่าระหว่างหน้า เช่้นเมื่อมีการกดปุ่ม button เพื่อประมวลผล

* ต้องลองที่ TextBox จะเห็นชัด
* True : เมื่อ PostBack แล้วจะไม่เปลี่ยน
* False : PostBack แล้วหาย
* ลองที่หน้าจอ แล้ว ไม่็เป็น ผล ต้อง ลองทดสอบเอง อีกที กับ TextBox

===== id =====
ทุกคอนโทรลต้องมี id

===== CSS Class =====
คือ คลาสของ Style Sheet

===== Behavior , Auto Complete Type=====
* มีเพิ่มใหม่ ใน VS2008 มี Intellisense
* แต่ มักเป็น Pattern ของ US จึงไม่มีประโยชน์เท่าไร

===== AutoPostBack Property =====
* เช่นปุ่ม กด เกิด Event
* หลัง เกิด Event มี 2 ลักษณะ คือ 1 เกิดที่ client แล้วจะไปเกิดที่ server
* ปกติ จะ PostBack ที่ Button เท่านั้น Control อื่นเช่น TextBox จะไม่ มีผลให้ PostBack
* Dropdown ListBox Property AutoPostBack ถ้ากำหนดเป็น True จะทำให้ เมื่อแก้ไขข้อมูล แล้วจะส่ง PostBack ทันที

===== Enable =====
* กำหนด ให้ False -- ดูอย่างเดียว

===== MaxLength =====


===== Rows / TextMode =====
สำหรับ TextBox ว่าบรรทัดเดียว หลายบรรทัด หรือ password

===== ToolTips =====
เมื่อเมาส์ผ่าน

===== Wrap =====
กรณี TextArea ให้ตัดข้อความเมื่อ เป็น TextArea

===== Event สำคัญ TextChanged =====
มี เพียง Event เดียว

==== Command ====
* มี 2 event สำคัญ
* Click
* Command , กับ Key

==== HyperLink กับ LinkButton ====
* กด แล้ว PostBack ---> Link Button
* กดแล้ว ไม่เกิด Event แล้ว วิ่้งไป เว็ปอื่นเลย --> Hyper Link , ไม่มี PostBack

===== HyperLink Property ที่ใช้บ่อย =====
* NavigateURL : ให้วิ่งไปหน้าไหน
* Target : ปกติ หน้าเดิม ,Blank เพื่อให้เปิดหน้าใหม่

==== Image Button ====
เหมือน LinkButton เพียงแต่ กำหนดรูปได้
ว่าจะเอารูปไหนเป็นปุ่ม

==== DropDown List ====
บางคนเรียก ComboBox

==== List Box ====
==== CheckBox ====

==== RadioBox ====

==== CheckBox List /RadioButton List ====
* รายการที่เลือกดึงจาก Db ได้ ง่ายมาก
* ใส่เป็น Item ได้ด้วย

==== Control อื่นๆ ====
* Control อื่นๆ ไม่ค่อยได้ใช้
* แต่ที่สำคัญ คือ Literal , FileUpload , ...

=== ทดลองทำ ===

* ทดลองสร้าง Page SignUp เพื่อลงทะเบีัยน ใช้ control TextBox,RadioButton , DropDownListbox
* ให้ใช้ Standard Control ไม่ใช่ HTML Control
* แต่ Table ให้ใช้ HTML Control
* Password ให้ใช้ TextBox , Property TextMode=Password


=== Dropdown List , Property ===
* Index เป็นตัวเลข ตั้งแต่ 0
* Item -- Return มาเ ป็น Object ของ ListItem
* ใน ListItem จะบอกหมด ตั้งแต่ index, text ,value
* SelectedValue -- เป็น String , ไม่ใช่ที่แสดงอยู่แต่เป็น ที่ Value ที่ำ กำหนดใช้จริงเช่น รหัส
* การเลือก รายการแ รก ใ ช้ SelectedIndex = 0
* การเคลียร์ค่า จะใช้ SelectedIndex = -1 แต่ถ้า เป็น dropdown listbox จะยังคงแสดงค่าแรก

=== RadioButton List ===
* การกำหนดใ ห้เ ลือ ก รายการ แ รกจะใ ช้ SelectedIndex = 0
* การเคลียร์ค่า จะใช้ SelectedIndex = -1

=== Form Validation ===
* ปกติ ต้องเขียนโปรแกรมเช็ค แต่คอนโทรลนี้ ช่วยไม่ต้องเขียนโปรแกรม
* เช่นตรวจสอบ e-mail
* เรียก validation server control
* มี อยู่ 6 ตัว ใน VS.NET 2008
* หลักๆ : Require , Compare เช่น 2 ช่องต้องตรงกัน , Type ข้อมูล ตัวเลขตัวหนังสือ ,Format เช่น Email
* การทำ Validation ควรทำ ที่ Client ไม่่ใช่ server
* เดิมใช้ 2 แบบ คือ 1 ส่ง server ตรวจ 2 ใช้ javascript
* web server control -- generate javascript ให้เหมือนๆเดิม
==== Require Field ====
* เช็คว่าตัวไหน Require ไม่ Require
* สิ่งที่ต้อง set : ControlToValidate เช่นเลือก txEmail
* การเตือนมี 2 ลักษณะ คือ 1 จุดที่วาง 2 แสดงที่ '''Validation Summary''' Control
* ปกติ แล้ว [[#Validation Summary | Validation Summary]] นั้น 1 Page ใช้แค่ 1 Control , มักวางด้้านล่าง

==== Validation Summary ====
* เลือก Display Mode ได้หลายแบบ เช่น เป็น Bullet , ห รือจะ ให้ แสดงเป็น messagebox popup ก็ได้
* ลำดับ การแสดง Error จะควบคุมไม่ได้
* ไม่ต้อง set อะไร เพิ่ม มันจะเอา Error Message จาก Control อื่นมาแสดงเลย
* ถ้าไม่ต้องการ ให้ Validator Control อื่นๆ แสดง Message ก็ให้ Set Propery '''Display''' ของ Validator Control นั้น ให้เป็ น '''none''' แทน '''Static'''

==== Range Validator ====
* ตรวจสอบประเภทก่อน , เลือก Type ก่อน เช่น Integer
* แล้วเลือกช่วง Minimum , Maximum
* อื่นๆ เหมือนกันกับ Require

==== RegularExpression Validator ====
* ใช้ Regular Expression
* เช่นใช้กับ e-mail , มี รูปแบบให้เลือกแล้ว
* ถ้าต้องการ ใช้กับ เลขประจำตัวประชาชน ถ้า ต้องการให้มีขีด หรือ เบอร์มือถือ ก็ช่วยให้ตรวจสอบได้ง่าย
* Regular Expression จะมีการใช้งาน ใน วิชาเรียน compiler , เหมืิอนๆ เป็นภาษาๆหนึ่ง
* Set property ''' ValidationExpressio'''n เลือก '''Internet e-mail Address''' จะได้ ดังนี้ \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

==== Compare Validator ====
* ไว้สำหรับ เปรียบเทียบ ระหว่าง คอนโทรล 2 ตัว
* เช่นใช้เทียบว่า password ตรงกันไหม
* ปกติใช้ Type = String
* Property : ControlToCompare , ControlToValidate

==== Custom Validator ====
* จำเป็นที่จะต้องเขียน Function JavaScript เอาเอง
* แล้ว ใส่ชื่อ Function ลงไป ให้คอนโทรลเรียก function นั้น
* ปกติไม่ค่อยได้ ใช้
* Property : ClientValidationFunction , ControlToValidate

ตัวอย่างการ ใส่ javascript ไว้ใน Page ที่เป็น Master / Content นั้น
โดยทั่วไป ต้อง ใส่ใน Control PlaceHolder อีกที่ แล้วจะวางที่ใน Page ก็ได้

ตัวอย่างเช่น







* แล้วจึง set property '''ClientValidationFunction''' ใ ห้เ ป็น '''test'''

==== การ ยกเลิก Validation สำหรับ บาง control ====
* ปุ่ม Reset ตามปกติแล้วไม่ควรที่จะทำการ Validation
* ต้อง เ็ซ็ต CausesValidation = false เพื่อให้ไม่มีการ เช็ค validate เมื่อ พยายามจะ เคลียร์ฟอร์ม

==== Validation Group Property ====
* ในฟอร์มนี้มี การ validate แค่แบบเดียว แต่บางฟอร์ม มีหลายแบบ
* เช่น มี 2 ปุ่ม ทำงานต่างกัน เช่น ปุ่มค้นหา กับปุ่ม เพิ่มข้อมูล มีการตรวจ control ต่างกัน
* เช่นปุ่มค้่นหา ตรวจ control กลุ่ม แรก ปุ่มเพิ่มข้อมูล ตรวจ control กลุ่มที่2 โดยไม่ต้องตรวจ กลุ่มแรก
* ใส่ชื่อ group ใน property ValidationGroup , เซ็ตทุก Validator ใน Group
* และ ต้อง แยก ValidationSummary ด้วย โดยอาจต้องสร้าง เพิ่ม อีก 1 อัน
* ช่วย ในกรณี ที่ต้องการ ให้ มีการแยก Validate ใน Master/ Content Page

==== การออกแบบฟอร์ม ====
* ให้ออกแบบ เพื่อป้องกัน user กรอกผิดกรอกถูกเสมอ บังคับให้มากที่สุดเท่าที่จะทำได้
==== Cross -Browser ====
* ต้อง Test กับ Browser ที่ต้องการก่อน
* JavaScript ถ้า Browser Disable ไว้ จะทำงานไม่ได้
* ถ้า JavaScript ใช้่ไม่ได้ แต่ กรอก เข้าได้ ทะลุ ในชั้น Database เราต้อง จับ Error มาแสดง ให้ USer เข้าใจด้วย

ทดสอบส่ง Wiki

== วันที่ 8 กันยา 2551 เช้า ==
จดคำบรรยาย โดย ฐิติพงศ์ สำราญวานิช

=== Set Property ของ Master Page ===
* ตัวอย่าง การ เซ็ต Propert ของ Master Page
* และ ให้เซ็ตค่า เฉพาะ โหลดครั้งแรก

If Not Me.IsPostBack Then
Me.Title = "Sign Up"
CType(Me.Master.FindControl("lbHeader"), Label).Text = "Sign Up"
End If


=== Me.IsPostBack ===
* และ ให้เซ็ตค่า เฉพาะ โหลดครั้งแร
* ถ้ามี user กดปุ่ม จะไม่ set ค่า , ไม่เข้า If

If Not Me.IsPostBack Then
...
End If


=== Partial ===
แยกแบ่งระหว่าง Designer กับ Source Code จริงๆที่เราเขียน
ที่ GEnerate ไม่ต้องแตะต้อง

=== Namespace ===
เช่น

เป็นกาจัดหมวดหมู่ย่อยๆลงไป เพื่อเรียกใช้ง่าย
Public Partial Class Form1UI
Inherites System.Web.UI.Page


=== Sub , Function ===
เรียกใน VB.NET เรียก Method

=== Type Object ===
* เป็น BaseClass ของ OOP
* ทุกๆตัว จะ Inherit มาจาก Object

=== Event Handler ===

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
...
End Sub

จะเห็นว่า Handles Me.Load นั่นคือ ตัวที่ระบุว่า Method นี้ รองรับ Event Load


=== การส่งผ่าน Parameter แบบ Object ของ Object ===

VB.NET เป็น StrongType ต้องระบุ Type
เวลาเรา Inherit จาก Class A ไปเป็น B หรือจาก B ไปเ็ป็น C

ถ้า TypeA Inherit เป็น TypeB
ถ้า TypeB Inherit เป็น TypeC
ถ้า TypeA มี 3 Method , TypeB มี 7 Method
ถ้า Dim a As TypeA แล้ว a จะเก็บ Object ของ TypeB , TypeC ได้
เช่น Dim b As TypeB
a = b ได้ ( แต่ b = a ไม่ได้ )
เป็นเรื่องของ Polymorphism

ข้อมูลนั้นจริงๆ จะเป็น Object TypeB ที่มี 7 Method
แต่ Interface ภายนอกจะเป็น เห็นแค่ Method ของ TypeA คือเห็นแค่ 3 Method
ไม่สามารถ มองเห็น Method ที่เพิ่มมาของ TypeB ได้

ใช้ a.MethodOfTypeB ไม่ได้
แต่ใช้
a.MethodOfTypeA ได้

การแปลงกลับไปเป็น TypeB ทำโดย
Dim bx As TypeB
bx = CType(a,TypeB) แปลงกลับ ทำให้ bx มี 7 Method เหมือนเดิม ได้
แล้วจะใช้ bx.MethodOfTypeB ได้

เป็นการเปลี่ยน Interface หรือเหมือนกับ เปลี่ยนกรอบ

ถ้า Object จริงๆเป็น a แล้วจะเปลี่ยนเป็น เป็น B อย่างนี้ไม่ได้




=== สิ่งที่ FindControl Method Return ค่ามา มี Typeเป็น อะไร ===

ทุก Web Control จะ Inherit มาจาก Class เดียวกัน ชื่อว่า
System.Web.UI.Control
แต่การจะ Cast เป็น อะไรต้อง รู้ Typeจริงๆของมัน

เช่น Object เป็น label และ Cast เป็น TextBox จะ Error ขณะรันทาม

NOTE : น่าจะเรียกว่า Late-Binding


=== Sender Parameter ===

* Sender As Object

เราต้องรู้ เองว่า Sender มี Type เป็นอะไร
เพื่อจะ Casting เพื่อเปลี่ยน เพื่อให้เห็น Method มากขึ้น

=== Type Casting ===

ใน OOP การเีปลี่ยน Type เรียกว่า Type Casting ปกติไม่เรียก Convert
แต่ .NET ใช้ คำว่า Convert

เรามักใช้ Casting เยอะ



=== Page Load , Master , Content ===
* Page Load จะทำทั้งคู่
* หน้า Content จะทำก่อน Master จะทำทีหลัง
* ทดลองโดยใช้ Page Break ใน Debug
* ดังนั้นหากต้องการ ให้ทุก หน้าแสดง ชื่อ Application เหมือนกัน จึงทำโดย ใส่โค้ด ดังนี้ ใน Page_Load ของ Master Page


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Page.Title = "ระบบงาน ABC :" & Page.Title
End Sub

test

aaa
bbb
ccc

ddd


for ($i = 0 ; $i <10 ; $++){
echo "$i" ;
}
?>