আমাদের আজকের আলোচনার বিষয় ফর্ম ইভেন্ট – যা অধ্যায় ৬ ”ভিজ্যুয়াল বেসিক ফর্ম ডিজাইন” এর অন্তর্ভুক্ত। বর্তমান বিশ্বের সর্বাধুনিক প্রযুক্তি হচ্ছে কম্পিউটার প্রযুক্তি। কারণ শিল্পকারখানা, গবেষণা, শিক্ষাপ্রতিষ্ঠান, চিকিৎসাশাস্ত্র ইত্যাদি সকল ক্ষেত্রই আজ কম্পিউটার অটোমেটেড। কম্পিউটার অটোমেশনের সঙ্গে কম্পিউটার প্রোগ্রামিং ও প্রোগ্রামিং লেখার জন্য প্রোগ্রামিং ল্যাংগুয়েজ অত্যন্ত গুরুত্বপূর্ণ।
তাই শিক্ষা ও গবেষণার জন্য প্রোগ্রামিং ল্যাংগুয়েজ অধ্যয়ন একটি অতি আবশ্যকীয় বিষয়। বিষয়টি অত্যন্ত গুরুত্বসহ বিবেচনা করে বর্তমানে কারিগরি শিক্ষার সকল টেকনোলজিতে কম্পিউটার প্রোগ্রামিং ল্যাংগুয়েজ বিষয়কে আবশ্যিক করা হয়েছে ।

Table of Contents
ফর্ম ইভেন্ট
ফর্ম ইভেন্ট হচ্ছে এমন একটি ব্যবস্থা যার মাধ্যমে ভিজ্যুয়াল বেসিক অ্যাপ্লিকেশনে ব্যবহৃত Object সমূহ কী ধরনের কার্যাবলি সম্পাদন করবে তা নির্ধারণ করে দেয়। ভিজ্যুয়াল বেসিকে ব্যবহৃত Object সমূহের প্রত্যেকেরই নিজস্ব কিছু event আছে। Event এর অধীনেই form এর Procedure তৈরি করতে হয়। ফলে কোন event সংঘটিত হলে ঐ ইভেন্টের সাথে সংশ্লিষ্ট Procedure তার্যকর হয়ে থাকে।
Visual Basic Form এর জন্য যে সকল event ব্যবহৃত হয় নিম্নের তালিকায় সেগুলো উল্লেখ করা হল।
| ফর্ম ইভেন্ট ( Form event) | ||
| Activate | LinkClose | OLEDragOver |
| Click | LinkError | OLEGiveFeedBack |
| DblClick | LinkExecute | |
| Deactive | LinkOpen | OLESetData |
| DragDrop | Load | OLEStartDrag |
| DragOver | LostFocus | Paint |
| GetFocus | MouseDown | QueryUnload |
| Initialize | MouseMove | Resize |
| KeyDown | MouseUp | Terminate |
| KeyPress | OLEComplete Drag | Unload |
| KeyUp | OLEDragDrop | |
ফর্ম মেইনটেন্যান্স ও ফর্ম অপারেশন ইভেন্টস
ফর্ম মেইনটেন্যান্স ইভেন্ট (Form Maintenance Events) : Form Maintenance এর কাজে ব্যবহৃত event সমূহকে Form Maintenance Events বলে। নিম্নে Form Maintenance Events সমূহের বর্ণনা দেয়া হল। যথাঃ
Initialize Event : যখন কোন form load করা হয় তখনই এই event সংঘটিত হয়। এই event টি সাধারণতঃ form এ ব্যবহৃত variable সমূহকে initialize করার জন্য ব্যবহার করা হয়।
গঠন (Syntax):
এর syntax নিম্নরূপঃ
Private Sub object_Initialize ()
Load Event: কোন ফর্ম লোড হওয়ার সময় এই ইভেন্ট সংঘটিত হয়।
গঠন (Syntax) : Load Event-এর সিনট্যাক্স নিম্নরূপঃ
Private Sub Form_Load()
Private Sub MDIForm_Load()
ফর্মের কোন কন্ট্রোলের জন্য প্রাথমিকভাবে ডাটা নির্ধারণ করতে এই ইভেন্ট ব্যবহার করা যায়। যেমন কোন কম্বোবক্স কিংবা সিস্টবক্সে প্রাথমিকভাবে কিছু আইটেম প্রদর্শনের জন্য এই ইভেন্ট-এ প্রয়োজনীয় কোড লেখা যায়। আবার form-level কোন তেরিয়েবল ব্যবহার করতে হলে তা এই ইভেন্ট-এ ঘোষনা করতে হবে।
Initialize ইভেন্ট-এর পর এই ইভেন্ট সংঘটিত হয়।
প্রোগ্রাম লোড করা হয়নি এমন কোন ফর্মের যে কোন প্রপার্টি ব্যবহার করা হলে ফর্মটা লোড হবে ঠিকই কিন্তু প্রদর্শিত হবেনা (MDIChild প্রপার্টির মান False হলে)।
কোন MDI Form অবজেক্ট লোড না করে তার কোন Child ফর্ম লোড করা হলে, সংশ্লিষ্ট MDIForm এবং Child ফর্মটা লোড হবে এবং প্রদর্শিত ও হবে। কিন্তু অন্যান্য ফর্মের ক্ষেত্রে Show মেথড কিংবা Visible প্রপার্টি True সেট না করলে সংশ্লিষ্ট ফর্মটা প্রদর্শন করা যাবে না।
Activate, Deactivate Event :
Activate : কোন অবজেক্ট active window হলে এই ইভেন্ট সংঘটিত হয়।
Deactivate: কোন অবজেক্ট যখন deactivate থাকে তখন এই ইভেন্ট সংঘটিত হয়।
গঠন (Syntax) : Activate ও Deactivate Event-এর সিনট্যাক্স নিম্নরূপঃ
Private Sub object Activate ()
Private Sub object Deactivate ()
কোন একটা অবজেক্টকে মাউস দিয়ে ক্লিক করে কিংবা প্রোগ্রাম Show অথবা SetFocus এর মাধ্যমে active করা যায়। একটা অবজেক্ট এর Visible প্রপার্টি False হলে, তার Activate ইভেন্ট কাজ করবেনা। যেমন, Load এর মাধ্যমে একটা ফর্মকে লোড (active) করা হলেও Show ছাড়া ঐ ফর্মকে visible করা যায় না এবং visible না হওয়া পর্যন্ত ফর্মের Activats ইভেন্ট সংঘটিত হয়না।
Activate কিংবা Deactivate ইভেন্ট শুধুমাত্র একটা অ্যাপ্লিকেশনের মধ্যেই সীমাবদ্ধ। একটা অবজেক্ট-এর GotFocus ইভেন্ট-এর পূর্বে Activate ইভেন্ট এবং Deactivate ইভেন্ট এর পূর্বে LostFocus ইভেন্ট সংঘটিত হয়।
Query Unload, Unload Event :
ব্যবহারকারী যখন কোন ফর্মের কন্ট্রোল মেনু থেকে Close ব্যবহার করে ফর্মটাকে বন্ধ করে কিংবা কোডিং-এ Unload এর মাধ্যমে যখন ফর্ম বন্ধ করা হয়, তখন সংশ্লিষ্ট অবজেক্ট-এ এই ইভেন্ট সংঘটিত হয়।
গঠন (Syntax) : Unload Event-এর সিনট্যাক্স নিম্নরূপঃ
Private Sub object_Unload (cancel As Integer)
এই ইভেন্ট-এর cancel আরগুমেন্ট-এর জন্য যে কোন ধনাত্মক মান (০ ব্যতীত) নির্ধারণ করলে, ফর্মটা সম্পূর্ণভাবে বন্ধ হয়ে যায় না, উইন্ডোজের অপারেটিং এনভায়রনমেন্ট-এ থেকে যায়। এ ক্ষেত্রে ফর্মটা সম্পূর্ণ বন্ধ করতে হলে QueryUnload ইভেন্টটা ব্যবহার করতে হবে।
Unload ইভেন্ট-এর পূর্বে QueryUnload ইভেন্টটা সংঘটিত হয়।
প্রোনামে Unload মেথড ব্যবহার করলে Unload ইভেন্ট সংঘটিত হয়।
Terminate Event :
যখন Visual Basic হতে form টি remove হয়ে যায় কিংবা ফর্মের সকল reference memory থেকে মুছে যায় তখনই Terminate event টি কার্যকর হয়।
গঠন (Syntax): Terminate Event-এর সিনট্যাক্স নিম্নরূপঃ
Private Sub object Terminate ()
ফর্ম অপারেশন ইভেন্ট
Form এ কোন operation চালাবার সময়ে সংঘটিত events সমূহকে Form Operation Events বলে। নিম্নে এসকল events সমূহ বর্ণনা করা হলো। যথাঃ
Got Focus Events :
টেব দিয়ে কিংবা মাউস দিয়ে ক্লিক করে অথবা কোডিং-এ SetFocus এর মাধ্যমে কোন অবজেক্টকে সিলেক্ট করা হলে, তথা একটিভ করা হলে, সংশ্লিষ্ট কন্ট্রোলের জন্য এই ইভেন্ট সংঘটিত হয়।
গঠন (Syntax): GotFocus Event-এর সিনট্যাক্স নিম্নরূপঃ
Private Sub Form_GotFocus ()
Private Sub object_GotFocus ([index As Integer)
একটা ফর্মে সংযুক্ত সবগুলো অবজেক্ট যদি disable করা হয়, তাহলে ফর্মের ক্ষেত্রে এই ইভেন্ট সংঘটিত হয়। কোন অবজেক্ট-এর Enable কিংবা Visible প্রপার্টি False সেট করা থাকলে, সংশ্লিষ্ট অবজেক্ট-এর ক্ষেত্রে এই ইভেন্ট সংঘটিত হবেনা।
কোন কন্ট্রোলের Load, Resize, Paint এবং GotFocus ইভেন্ট-এর জন্য কোড লেখা হলে, প্রথমে Load, তারপর Resize এরপর Paint এবং শেষে GotFocus ইভেন্ট সংশ্লিষ্ট কোডগুলো কাজ করবে। এই ইভেন্টগুলোর জন্য কোড লেখার সময়। এই ব্যাপারটা খেয়াল রাখতে হবে।
Lost Focus Event
কোন অবজেক্ট ব্যবহার করার পর টেব কিংবা মাউস দিয়ে ক্লিক করে অন্য অবজেক্ট-এ গেলে পূর্বের অবজেক্ট-এর জন্য এই ইভেন্ট সংঘটিত হয়।
গঠন (Syntax) : Lost Focus Event-এর সিনট্যাক্স নিম্নরূপঃ
Private Sub Form_LostFocus()
Private Sub object_LostFocus([index As Integer])
Paint Event :
যখন কোন অবজেক্ট-এর কিছু অংশ কিংবা পুরোটাই সরানো হয় কিংবা বড় করা হয়, অথবা অবজেক্টকে যে উইন্ডো ঢেকে রেখেছিল, তা সরানো হলে এই ইভেন্ট সংঘটিত হয়।
গঠন (Syntax) : Paint Event-এর সিনট্যাক্স নিম্নরূপঃ
Private Sub Form_Paint()
Private Sub object Paint ([index As Integer]) প্রোগ্রামে আমরা যদি কোন গ্রাফিক্স মেথড ব্যবহার করি , তাহলে এই Paint ইভেন্টটা খুবই প্রয়োজনীয়। কেননা এই ইভেন্ট- এর মাধ্যমে গ্রাফিক্স মেথডের আউটপুটের প্রয়োজনীয় অংশ পুনঃঅংকনের কাজটা নিশ্চিত করা যায়।
প্রোগ্রামে কোন অবজেক্ট-এর Refresh মেথডটা ব্যবহার করা হলে, সংশ্লিষ্ট অবজেক্ট-এর Paint ইভেন্টটাও সংঘটিত হয়। তবে এক্ষেত্রে AutoRedraw প্রপার্টির মান True সেট করা থাকলে পুনঃঅংকনের কাজটা স্বয়ংক্রিয়ভাবেই হবে। অর্থাৎ, Paint ইভেন্ট- এর প্রয়োজন হবে না।
ফর্মের ClipControls প্রপার্টির মান False সেট করা থাকলে, প্রোগ্রাম চলাকালীন অবস্থায় Paint ইভেন্ট-এ ব্যবহৃত গ্রাফিক্স মেথড শুধুমাত্র প্রয়োজনীয় অংশটুকু পুনঃঅংকন করবে।
এখানে প্রয়োজনীয় অংশ বলতে বোঝানো হচ্ছে, ফর্মের যে অংশটুকু অন্য কোন ফর্ম বা উইন্ডো ঢেকে রেখেছিল কিংবা ফর্মটা মাউস দিয়ে টেনে যতটুকু বড় করা হয়েছিল। অন্যথায় (ClipControls = True হলে), গ্রাফিক্স মেথডটা পুরো ফর্মটাই পুনঃঅংকন করবে। তবে এক্ষেত্রে Image, Label, Line এবং Shape কন্ট্রোলগুলোও পুনঃঅংকন করা হবে।
প্রোগ্রাম যাতে ঠিকমত কাজ করতে পারে, সে জন্য Paint ইভেন্ট-এ নিচের কাজগুলো না করাই উচিৎ।
- ফর্ম কিংবা কন্ট্রোলকে ছোট বড় করা
- এমন কোন ভেরিয়েবল-এর মান পরিবর্তন করা, যা দ্বারা কোন অবজেক্ট-এর Size কিংবা appearence, যেমন, BackColor পরিবর্তীত হয়।

Resize Event :
কোন অবজেক্ট প্রথমবার প্রদর্শিত হওয়ার সময় কিংবা অবজেক্ট-এর window state পরিবর্তীত হলে এই ইভেন্ট সংঘটিত হয়। উল্লেখ্য যে, কোন ফর্ম maximized, minimized অথবা restored করা হলে তার window state পরিবর্তীত হয়।
গঠন (Syntax) : Resize Event-এর সিনট্যাক্স নিম্নরূপঃ
Private Sub Form_Resize()
Private Sub object_Resize(height As Single, width As Single)
Height: অবজেক্ট-এর নতুন উচ্চতা কত, তা এই আরগুমেন্ট-এর মাধ্যমে নির্ধারণ করা যায়। Width: অবজেক্ট-এর নতুন প্রশস্ততা কত তা এই আরগুমেন্ট-এর মাধ্যমে নির্ধারণ করা যায়।
কোন ফর্ম ছোট-বড় করা হলে, ফর্মে সংযুক্ত কন্ট্রোলগুলোও প্রয়োজনানুসারে ছোট বড় করার জন্য ফর্মের এই ইভেন্ট ব্যবহার করা যায়। এক্ষেত্রে ScaleHeight এবং ScaleWidth প্রপার্টির মাধ্যমে নতুন সাইজটা বের করা যায়।
ফর্ম ছোট-বড় হওয়ার সাথে সাথে যাতে কোন গ্রাফিক্সও ছোট-বড় হয়, সেজন্য Resize ইভেন্ট-এ Refresh মেথড ব্যবহার করে Paint ইভেন্টটা কার্যকর করা যায়।
ফর্মের AutoRedraw প্রপার্টির মান False সেট করা থাকলে এবং প্রোগ্রাম চলাকালীন অবস্থায় ফর্মটা ছোট-বড় করলে প্রথমে Resize এবং পরে Paint ইভেন্ট সংঘটিত হয়। তাই এই দুই ইভেন্ট-এ কোড লেখার সময় বিষয়টা খেয়াল রাখতে হবে।