မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး မဂၤလာပါ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Microsoft Visual Studio C# ကို အသံုးျပဳၿပီးေတာ့ Sorting Algorithms ေတြထဲက တစ္ခုျဖစ္တဲ့ Selection Sort Algorithm အေၾကာင္း ေလးကို ေလ့လာၾကည့္မွာ ျဖစ္ပါတရ္ဗ်ာ။ Selection Sort ရဲ႕ အလုပ္လုပ္သြားတဲ့ လုပ္ငန္းစဥ္ မူၾကမ္းကို ေအာက္ကပံုမွာ ေလ့လာႏိုင္ပါတရ္ဗ်ာ။
အလုပ္လုပ္သြားတဲ့ လုပ္ငန္းစဥ္က ရိုးရွင္းပါတရ္။ အထက္ပါပံုကို ၾကည့္လိုက္တာနဲ႔ နားလည္ႏိုင္ၾကမွာပါ။ ပိုၿပီးနားလည္သြားေအာင္ က်ေနာ္ အနည္းငရ္ ရွင္းျပပါ့မရ္။ Selection Sort Algorithm ရဲ႕ Step တစ္ခုမွာ အဆင့္(4)ဆင့္ခြဲၿပီး အလုပ္လုပ္ပါတရ္။ ငယ္စဥ္ႀကီးလိုက္(ASC)အတြက္ က်ေနာ္ ဥပမာ ျပပါ့မရ္။
1. ပထမအဆင့္မွာေတာ့ Unsorted Array ရဲ႕ ပထမ Index ကို key အျဖစ္သတ္မွတ္ပါတရ္။
2. ဒုတိယအဆင့္အေနနဲ႔ key မွလြဲ၍ က်န္ Arrary အစုထဲမွ အငယ္ဆံုးကိန္း(Min)ကို ရွာပါတရ္။
3. ဒီအဆင့္မွာေတာ့ အေပၚမွာ က်ေနာ္တို႔ ရွာခဲ့တဲ့ အငယ္ဆံုးကိန္း(Min)နဲ႔ key ကို ႏႈိင္းယွဥ္ပါတရ္။ key ကႀကီးေနရင္ Min နဲ႔ Key ကို ေနရာခ်င္း ခ်ိန္းပါတရ္။ ငယ္ေနရင္ေတာ့ ဒီအတိုင္း ဆက္ထားပါတရ္။
4. အဆင့္တစ္ဆင့္ၿပီးတိုင္း Array ရဲ႕ ထိပ္ပိုင္းက်တဲ့ Index ေတြဟာ Sorted ျဖစ္ေနပါလိမ့္မရ္ဗ်။
နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္။ အေပၚကပံုကိုၾကည့္ပါ။ Step 1 ၿပီးလို႔ Step 2 ေျပာင္းတဲ့ အခ်ိန္မွာ Array ရဲ႕ First Index ဟာ Sorted ျဖစ္ေနပါၿပီ။ ဒီလိုပါပဲ key ကလည္း ဒုတိယ Index ကို ခုန္သြားပါလိမ့္မရ္။ ေနာက္တစ္ဆင့္ Setp 2 ၿပီးလို႔ Step 3 ေျပာင္းတဲ့အခါမွာလည္း Array ရဲ႕ ေရွ႕ Index ႏွစ္ခုဟာ Sorted ျဖစ္ေနတာ ေတြ႔ရပါလိမ့္မရ္။ key ကလည္း ေနာက္ Index တစ္ခုကို ခုန္သြား မွာပါ။ ဒီလုပ္ငန္းစဥ္အတိုင္းပဲ Array ရဲ႕ ေနာက္ဆံုး Index အထိ loop ပါတ္ ေျဖရွင္းသြားမွာ ျဖစ္ပါတရ္။
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ားအားလံုး မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ VS C# ကို အသံုးျပဳၿပီး Sorting Algorithms ေတြထဲက တစ္ခုျဖစ္တဲ့ Bubble Sort အေၾကာင္းေလးကို ေလ့လာၾကည့္ၾကပါ့မရ္ဗ်။
အေပၚကပံုကေတာ့ Bubble Sort Algorithm အလုပ္ လုပ္သြားတဲ့ ပံုစံပဲျဖစ္ပါတရ္။ အေပၚပံုမွာျမင္ရတဲ့အတိုင္း ကိန္းစဥ္တန္း ငါးလံုးရွိရင္ Loop Step ငါးခုရွိမွာျဖစ္ပါတရ္။ Step တစ္ခုစီတိုင္းမွာ ကပ္လွ်ပ္ ကိန္းစဥ္တန္းႏွစ္လံုးကို ႏႈိင္းယွဥ္ၿပီး ငယ္စဥ္ႀကီးလိုက္အတြက္ ေနာက္ကိန္းကငယ္ေနလွ်င္ေရွ႕ကိန္းနဲ႔ေနရာခ်ိန္းပါတရ္။ ေနာက္ကိန္းကႀကီးေနရင္ေတာ့ ဒီအတိုင္းပဲ ျပန္စီပါတရ္ဗ်။ ဒီနည္းအတုိင္းပဲ ကိန္းစဥ္တန္းဆံုးတဲ့အထိ ကပ္လွ်ပ္ႏွစ္လံုးစီ ႏႈိင္းယွဥ္ၿပီး ေနရာအခ်ိန္းအေျပာင္းလုပ္ပါတရ္။ Step တစ္ခုဆံုးတဲ့အခ်ိန္မွာ ကိန္းစဥ္တန္းရဲ႕ ေနာက္ဆံုးကို ေရာက္သြားတဲ့ ကိန္းဟာ အႀကီးဆံုးကိန္း ျဖစ္ေနမွာပါ။ ဒါေၾကာင့္ Step 1 ၿပီးတဲ့အခ်ိန္မွာ ေနာက္ဆံုး ကိန္းဟာ အႀကီးဆံုးကိန္း၊ Step 2 ဆံုးတဲ့အခါ ေနာက္ဆံုး ကိန္းႏွစ္လံုးဟာ Sort လုပ္ၿပီးသား အႀကီးဆံုးကိန္းျဖစ္ေနမွာပါ။ ဒီနည္းအတိုင္း ကိန္းစဥ္တန္းအားလံုး Sort လုပ္ၿပီးသည္အထိ Step သြားၿပီး Loop လုပ္ ႏႈိင္းယွဥ္ပါတရ္ဗ်ာ။ အေပၚက ပံုကို ၾကည့္လုိက္ရင္ေတာ့ က်ေနာ္ ဘာကို ဆိုလိုေနတရ္ဆုိတာကို နားလည္ႏိုင္ၾက လိမ့္မရ္လို႔ ထင္ပါတရ္။
ဒါကေတာ့ က်ေနာ္ရဲ႕ ေလ့လာၾကည့္မဲ့ Bubble Sort အတြက္ GUI ပါ။ DataGridView ထဲကို Array Set လုပ္တာကိုေတာ့ ေရွ႕က Insertion Sort သင္ခန္းစာမွာ ရွင္းျပခဲ့ၿပီးျဖစ္လို႔ မရွင္းေတာ့ပါဘူးဗ်ာ။ private void txtSetColumn_TextChanged(object sender, EventArgs e){ ...} မွာ Coding ေလး ၾကည့္လိုက္ပါ။
ေနာက္တစ္ခုကေတာ့ Bubble Sort ကို က်ေနာ္ Method ခြဲေရးထားတဲ့ ပံုစံပါ။ public int[] BubbleSorted(int[] arr, string Opt){...} မွာ Coding ေလး ေလ့လာၾကည့္ပါအံုးဗ်။
Method ကို Calling လုပ္တဲ့ ပံုစံကိုေတာ့ private void btnBubbleSort_Click(object sender, EventArgs e) {...} မွာေ လ့လာႏိုင္ပါတရ္။
Result ပံုေလးနဲ႔ Bubble Sort ရဲ႕ အလုပ္ လုပ္ပံုေလးကို သိၿပီဆိုရင္ေတာ့ က်ေနာ္တို႔ ပိုၿပီး နားလည္သြားေအာင္ ေအာက္မွာ Coding အျပည့္အစံုေလးကို ေလ့လာၾကည့္ၾကမရ္ဗ်ာ။
နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ေမ်ာ္လင့္ပါတရ္ဗ်။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။
using System;
using System.Windows.Forms;
namespace BubbleSort
{
public partial class frmBubbleSort : Form
{
public frmBubbleSort()
{
InitializeComponent();
}
private void txtSetColumn_TextChanged(object sender, EventArgs e)
{
if (txtSetColumn.Text != "") {
//For Row of UnSorted-DataGridView
dgvUnSort.RowTemplate.Height = 35;
dgvUnSort.RowCount = 1;
dgvUnSort.RowHeadersVisible = false;
//For Column of UnSorted-DataGridView
dgvUnSort.ColumnCount = int.Parse(txtSetColumn.Text);
dgvUnSort.AllowUserToResizeColumns = true;
dgvUnSort.ColumnHeadersVisible = false;
for (int i = 0; i < dgvUnSort.ColumnCount; i++) {
dgvUnSort.Columns[i].Width = 35;
}
//For Row of Sorted-DataGridView
dgvSort.RowTemplate.Height = 35;
dgvSort.RowCount = 1;
dgvSort.RowHeadersVisible = false;
//For Column of Sorted-DataGridView
dgvSort.ColumnCount = int.Parse(txtSetColumn.Text);
dgvSort.AllowUserToResizeColumns = true;
dgvSort.ColumnHeadersVisible = false;
for (int i = 0; i < dgvSort.ColumnCount; i++) {
dgvSort.Columns[i].Width = 35;
}
} else {
dgvUnSort.Rows.Clear();
dgvSort.Rows.Clear();
}
}
private void btnBubbleSort_Click(object sender, EventArgs e)
{
//Set Default Sorting Option
if (cbSortOption.SelectedIndex == -1) {
cbSortOption.Text = "ASC";
}
//Load Data to Array[] from DataDridView
int length = dgvUnSort.ColumnCount;
int[] UnSortedArr = new int[length];
for (int i = 0; i < length; i++) {
UnSortedArr[i] = int.Parse(dgvUnSort.Rows[0].Cells[i].Value.ToString());
}
//Call BubbleSort Method
int[] SortedResult = BubbleSorted(UnSortedArr, cbSortOption.Text);
//Add Sorted Data to DataGridView
for (int i = 0; i < SortedResult.Length; i++) {
dgvSort.Rows[0].Cells[i].Value = SortedResult[i];
}
}
public int[] BubbleSorted(int[] arr, string Opt)
{
int length = arr.Length;
switch (Opt)
{
case "ASC" :
for (int i = 0; i < length; i++) {
for (int j = 0; j < length-1 - i ; j++) {
if (arr[j] > arr[j+1]) {
int key = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = key;
}
}
}
return arr;
case "DESC":
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
int key = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = key;
}
}
}
return arr;
default:
return null;
}
}
}
}
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ားအားလံုး မဂၤလာပါဗ်ာ။ က်ေနာ္တို႔ ဒီေန႔ေတာ့ VS C# ကို အသံုးျပဳၿပီး Sorting Algorithms ေတြထဲက တစ္ခုျဖစ္တဲ့ Insertion Sort အေၾကာင္းေလးကို Coding ေလးေရးၿပီး ေလ့လာၾကည့္ၾကပါမရ္။
အေပၚက ပံုကေတာ့ Insertion Sort အလုပ္ လုပ္သြားတဲ့ ပံုစံပါ။ က်ေနာ့္ Website ေလးျဖစ္တဲ့ programmingknowledge.blogspot.com မွာ Insertion Sort အေၾကာင္းကို သီအုိရီနဲ႔ႏြယ္ၿပီး အနည္းငရ္ ရွင္းျပခဲ့ၿပီးပါၿပီ။ မိတ္ေဆြတို႔ ေလ့လာႏိုင္ပါတရ္ဗ်။ ဒါေၾကာင့္ ဒီေန႔ ေလ့က်င့္ခန္းမွာ က်ေနာ္ အေသးစိတ္မရွင္းေတာ့ပဲ Code Flow ေလးနဲ႔ Screen Shoot ေလးေတြပဲ ျပပါ့မရ္ဗ်။
Coding Flow ကိုေတာ့ ေလ့လာၾကည့္မရ္ဆိုရင္ေတာ့ အဆင့္(၄)ဆင့္နဲ႔ ေတြ႔ရမွာပါ။
အဆင့္(၁)။ မိမိႏွစ္သက္ရာ Columns အေရအတြက္ကို သက္မွတ္ၿပီး DataGridView မွာ Array[ ] အတြက္ Table တစ္ခု တည္ေဆာက္ယူမွာျဖစ္ပါတရ္။
အဆင့္(၂)။ ဖန္တီးထားေသာ UnSorted Table မွာ မိမိႏွစ္သက္ရာ Array[ ] အတြက္ ကိန္းစဥ္တန္းတစ္ခုကို ရိုက္ထည့္ပါ့မရ္။
အဆင့္(၃)။ ဒီအဆင့္မွာေတာ့ Sorting Option ကို ေရြးခ်ယ္ၿပီး Insertion Sort Btn ကိုႏွိပ္ကာ Sorting လုပ္ေဆာင္ယူမွာျဖစ္ပါတရ္။
အဆင့္(၄)။ ဒါဆိုရင္ေတာ့ က်ေနာ္တို႔ ေျပာင္းလဲယူလိုက္တဲ့ Sorting လုပ္ၿပီးသား Array[] တစ္ခုကို Sorted DataGridView မွာျမင္ရမွာျဖစ္ပါတရ္ဗ်ာ။
ဒီေလ့က်င့္ခန္းမွာ Sorting ကို သီးသန္႔ Method ခြဲၿပီး ေရးထားပါတရ္။ ဒီမွာ မိတ္ေဆြတို႔ တစ္ခု သတိထားရမွာေတာ့ က်ေနာ္တို႔ ဖန္တီးထားတဲ့ Sorting Method က Array[] ကို Parameter Passing လုပ္ထားၿပီး Array[] ကိုပဲ return ျပန္ထားတဲ့အတြက္ေၾကာင့္ Sorting Method ကို ေခၚမသံုးခင္ မိမိ Sort လုပ္ခ်င္ေသာ ကိန္းစဥ္တန္းကို Array[] တစ္ခုအျဖစ္ အရင္ ဖန္တီးယူရမွာျဖစ္ပါတရ္ဗ်။
public int[] InsertSort(int[] arr, string Opt){ ... }
ဒါက Insertion Sort ရဲ႕ Method ပါ။
int[] SortedArr = InsertSort(Array, "ASC/DESC");
ဒါကေတာ့ Calling ပံုစံပါ။
Coding အျပည့္အစံုေလးကို ေအာက္မွာ ၾကည့္လိုက္ပါအံုးဗ်ာ။
နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ေမ်ာ္လင့္ပါတရ္ဗ်။
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။
using System;
using System.Windows.Forms;
namespace InsertionSort
{
public partial class frmInsertionSort : Form
{
public frmInsertionSort()
{
InitializeComponent();
}
private void txtSetColumn_TextChanged(object sender, EventArgs e)
{
if (txtSetColumn.Text != "") {
//For Row of UnSorted-DataGridView
dgvUnSort.RowTemplate.Height = 35;
dgvUnSort.RowCount = 1;
dgvUnSort.RowHeadersVisible = false;
//For Column of UnSorted-DataGridView
dgvUnSort.ColumnCount = int.Parse(txtSetColumn.Text);
dgvUnSort.AllowUserToResizeColumns = true;
dgvUnSort.ColumnHeadersVisible = false;
for (int i = 0; i < dgvUnSort.ColumnCount; i++) {
dgvUnSort.Columns[i].Width = 35;
}
//For Row of Sorted-DataGridView
dgvSort.RowTemplate.Height = 35;
dgvSort.RowCount = 1;
dgvSort.RowHeadersVisible = false;
//For Column of Sorted-DataGridView
dgvSort.ColumnCount = int.Parse(txtSetColumn.Text);
dgvSort.AllowUserToResizeColumns = true;
dgvSort.ColumnHeadersVisible = false;
for (int i = 0; i < dgvSort.ColumnCount; i++) {
dgvSort.Columns[i].Width = 35;
}
}else {
dgvUnSort.Rows.Clear();
dgvSort.Rows.Clear();
}
}
private void btnInsertionSort_Click(object sender, EventArgs e)
{
//Set Default Sorting Option
if (cbSortOption.SelectedIndex == -1)
{
cbSortOption.Text = "ASC";
}
//Load Data to Array[] from DataDridView
int length = dgvUnSort.ColumnCount;
int[] UnSortedArr = new int[length];
for (int i = 0; i < length; i++){
UnSortedArr[i] = int.Parse(dgvUnSort.Rows[0].Cells[i].Value.ToString());
}
//Call InsertionSort Method
int[] SortedResult = InsertSort(UnSortedArr, cbSortOption.Text);
//Add Sorted Data to DataGridView
for (int i = 0; i < SortedResult.Length; i++)
{
dgvSort.Rows[0].Cells[i].Value = SortedResult[i];
}
}
public int[] InsertSort(int[] arr, string Opt) {
int key, j;
switch (Opt)
{
case "ASC" :
for (int i = 1; i < arr.Length; i++){
key = arr[i];
j = i - 1;
while (key < arr[j] && j >= 0){
arr[j+1] = arr[j];
j = j-1;
if (j < 0)
break;
}
arr[j+1] = key;
}
return arr;
case "DESC" :
for (int i = 1; i < arr.Length; i++){
key = arr[i];
j = i - 1;
while (key > arr[j] && j <= arr.Length)
{
arr[j+1] = arr[j];
j = j-1;
if (j < 0)
break;
}
arr[j+1] = key;
}
return arr;
default :
return null;
}
}
}
}
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ VS C# ကိုအသံုးျပဳၿပီး Number(ကိန္းဂဏန္း)ေတြကို Word(စကားလံုး)ေတြအျဖစ္ ဘရ္လို ေျပာင္းလဲယူႏိုင္မလဲ ဆိုတာေလးကို ေလ့လာၾကည့္ၾကပါ့မရ္။ က်ေနာ္ Method ခြဲေရးၿပီး ဆြဲသံုးတဲ့ နည္းလမ္းေလးနဲ႔ပဲ ေရးထားပါတရ္။ စိတ္၀င္စားတဲ့ ညီအစ္ကို၊ ေမာင္ႏွမမ်ား က်ေနာ္နဲ႔အတူ ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
using System;
using System.Windows.Forms;
namespace NumberToChar
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public string NumberToWords(long number)
{
string words = "";
if (number == 0){ return "သုည"; }
if (number < 0){ return "အႏုတ္ " + NumberToWords(Math.Abs(number)); }
if ((number / 100000) > 0){
words += NumberToWords(number / 100000) + "သိန္း၊ ";
number %= 100000;
}
if ((number / 10000) > 0){
words += NumberToWords(number / 10000) + "ေသာင္း ";
number %= 10000;
}
if ((number / 1000) > 0){
words += NumberToWords(number / 1000) + "ေထာင္ ";
number %= 1000;
}
if ((number / 100) > 0){
words += NumberToWords(number / 100) + "ရာ ";
number %= 100;
}
if (number > 0){
var unitsMap = new[] { "သုည", "တစ္", "ႏွစ္", "သံုး", "ေလး", "ငါး", "ေျခာက္", "ခုႏွစ္",
"ရွစ္", "ကိုး", "တစ္ဆယ္", "တစ္ဆယ့္တစ္", "တစ္ဆယ့္ႏွစ္", "တစ္ဆယ့္သံုး", "တစ္ဆယ့္ေလး", "တစ္ဆယ့္ငါး",
"တစ္ဆယ့္ေျခာက္", "တစ္ဆယ့္ခုႏွစ္", "တစ္ဆယ့္ရွစ္", "တစ္ဆယ့္ကိုး" };
var tensMap = new[] { "သုည", "တစ္ဆယ့္", "ႏွစ္ဆယ့္", "သံုးဆယ့္", "ေလးဆယ့္",
"ငါးဆယ့္", "ေျခာက္ဆယ့္", "ခုႏွစ္ဆယ့္", "ရွစ္ဆယ့္", "ကိုးဆယ့္" };
if (number < 20){
words += unitsMap[number];
}else{
words += tensMap[number / 10];
if ((number % 10) > 0){
words += "-" + unitsMap[number % 10];
}
}
}
return words;
}
private void btnNoToWord_Click(object sender, EventArgs e)
{
txtWord.Text = NumberToWords(long.Parse(txtNumber.Text)) +"က်ပ္";
}
private void txtNumber_KeyPress(object sender, KeyPressEventArgs e)
{
char ch = e.KeyChar;
if (!Char.IsDigit(ch) && ch != 8 && ch != 46)
{
e.Handled = true;
}
}
}
}
Resutl ကေတာ့ ပံုမွာ ျမင္ေတြ႔ရတဲ့အတုိင္းပါပဲဗ်ာ။ က်ေနာ္တို႔ ေရးထည့္ေပးလိုက္တဲ့ ကိန္းဂဏန္းေတြကို စကားလံုးေတြနဲ႔ ျပန္လည္ေဖာ္ျပေပးမွာျဖစ္ပါတရ္။ Coding မွာ ခက္ခဲတာေတြ မပါ ပါဘူးဗ်ာ။ က်ေနာ္တို႔ Number Conversion ေလ့က်င့္ခန္းေတြတုန္းက ေလ့လာခဲ့တဲ့ ကိန္းစဥ္တန္းတစ္ခုကို မိမိလိုခ်င္သေလာက္ အျပည့္ကိန္းနဲ႔ စား၊ ျဖတ္ထုတ္ၿပီး စာသားခ်ိန္းယူတဲ့ နည္းကို သံုးထားပါတရ္။ တြက္ခ်က္တဲ့အခ်ိန္မွာေတာ့ မိမိ Function ကို Funciton Body အတြင္းမွပဲ ထပ္ခါတလဲလဲ ျပန္ေခၚသံုးတဲ့ Function Recursion နည္းလမ္းကို အသံုးျပဳထားပါတရ္။ TextBox မွာ KeyPress Event ကိုအသံုးျပဳထားတာကေတာ့ က်ေနာ္တို႔ TextBox အတြင္းကို 0-9 digit ေတြနဲ႔ BackSpace Key, Delete Key တို႔ကို သီးသန္႔ အသံုးျပဳႏိုင္ေအာင္လို႔ ျဖည့္စြပ္ထားတာပါ။ မိတ္ေဆြတို႔အေနနဲ႔ မႀကိဳက္ရင္ မသံုးပဲ ေနႏိုင္ပါတရ္။ ဒါဆိုရင္ေတာ့ TextBox အတြင္းကို Number ေတြရိုက္ထည့္တဲ့အခါ သတိထားရမွာျဖစ္ၿပီး အျခားမဆိုင္တဲ့ Character ေတြ ပါလာခဲ့ရင္ေတာ့ Function ကိုျဖတ္တဲ့အခါ အလုပ္ မလုပ္ႏိုင္ပဲ Error ျဖစ္သြားမွာပဲျဖစ္ပါတရ္။
ဒီေလ့က်င့္ခန္းမွာေတာ့ က်ေနာ္ အႏုတ္ Key ရိုက္မရေအာင္ KeyPress Event မွာ ပိတ္ထားပါတရ္။ ဒါေပမဲ့ အေပၚမွာ အႏုတ္ Number ရိုက္ထည့္ရင္လည္း အလုပ္ လုပ္ေၾကာင္း ပံုနဲ႔ ျပထားပါတရ္ဗ်။ မိတ္ေဆြတို႔ အႏုတ္ကိန္းေတြပါ စာသားအျဖစ္ေျပာင္းခ်င္တရ္ဆိုရင္ေတာ့ TextBox_KeyPress Event ကို မသံုးပဲ Off ထားႏိုင္ပါတရ္။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။
