Formatted TextBox
ဒီေန႔ ရံုးမွာ program ေရးေနရင္းနဲ႔ entry form မွာ သံုးမယ့္ textbox တခ်ိဳဳ႕မွာ ကိုယ္လိုခ်င္တဲ႔ charactor ကိုပဲ ေရြးၿပီး ရိုက္ခြင့္ျပဳခ်င္တယ္။ ခြင့္မျပဳတဲ႔ charactor ေတြကို ရိုက္ရင္ ဘာမွ မေပၚေစခ်င္ဘူး။ အဲ့ဒီလို လုပ္ဖို႔ လိုလာတယ္။ ဥပမာဗ်ာ…. textbox ထဲမွာ ‘#’, ‘?’, ‘*’ only ပဲ ရိုက္ခြင့္ျပဳခ်င္တယ္ေပါ့။ အရင္တုန္းက project အေဟာင္းမွာေတာ့ numeric only ပဲရိုက္လို႔ရတဲ႔ textbox မ်ိဳးလုပ္ထားတာ ရွိတယ္။ အဲ့ဒီမွာ လုပ္တုန္းက htc file ကို သံုးၿပီးလုပ္ထားတာ။ htc က Firefox မွာ support မလုပ္ဘူး။ ဒါေၾကာင့္ အခုတစ္ေခါက္ေတာ့ ရို္းရိုး javascript နဲ႔ပဲ ထိန္းဖို႔ လုပ္လိုက္တယ္။ ဒါနဲ႔ Google အားကိုးလို႔ Internet ထဲမွာ ရွာေဖြဖတ္ရႈၿပီး ေရးလုိက္ပါတယ္။ browser အားလံုး support လုပ္ေအာင္ ေရးရတာလည္း နည္းနည္းေတာ့ လုပ္ေပါက္ကပ္သား။
javascript code
function numericTextBox(e) {
e = e || window.event;
var key = e.which || e.keyCode;
if ((!e.shiftKey && (key > 47 && key < 58)) || key == 8 || key == 46 || key == 35 || key == 36 || key == 37 || key == 39) {
return true;
} else {
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
return false;
}
}
function FormatedTextBox(e) {
e = e || window.event;
var key = e.which || e.keyCode;
if ((e.shiftKey && (key == 56 || key == 51 || key == 52)) || key == 8 || key == 46 || key == 35 || key == 36 || key == 37 || key == 39) {
return true;
} else {
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
return false;
}
}
aspx code
<asp:TextBox runat=”server” Width=”200px” onkeydown=”return FormatedTextBox(event)“></asp:TextBox>
<asp:TextBox runat=”server” Width=”200px” onkeydown=”return numericTextBox(event)“></asp:TextBox>
Javascript မွာ key code number ေတြကို အေသးစိတ္သိခ်င္ရင္ ဒီ(http://unixpapa.com/js/key.html) မွာ ၾကည့္လို႔ရပါတယ္။
Javascript event object အေၾကာင္းကိုေတာ့ ဒီ(http://www.exforsys.com/tutorials/javascript/javascript-event-object.html) ကေနၾကည့္လို႔ ရပါတယ္။
စာေမးခ်င္လို႔ပါခင္ဗ်ာ။
ကၽြန္ေတာ္က MSchart ကို သံုးထားပါတယ္။ DataVisualization.Charting ေပါ့ခင္ဗ်ာ။ C# windowform application ပါခင္ဗ်။
အၾကမ္းဖ်ဥ္းသံုးတာကေတာ့ timer တစ္ခုနဲ႔ MSChart ကို dynamic ေဆာက္တာပဲခင္ဗ်ဲ။
private void xxx(double[] tran)
{
this.Controls.Remove(this.chart1);
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
this.chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart();
((System.ComponentModel.ISupportInitialize)(this.chart1)).BeginInit();
this.SuspendLayout();
…..
this.chart1.Size = new System.Drawing.Size(800, 275);
this.chart1.TabIndex = 2;
this.chart1.Text = “chart3″;
this.ClientSize = new System.Drawing.Size(1000, 700);
this.Controls.Add(this.chart1);
}
ဆိုၿပီးေဆာက္တာခင္ဗ်။ DataPoint ေတြက [400] ေလာက္ရွိတဲ့ Double[] ကေန ဆြဲထုတ္ယူထားေတာ့ဗ်ာ ကၽြန္ေတာ့္ timer က 1ms ေလာက္ႏႈန္းနဲ႔သြားတဲ့အခါ ပံုကအရမ္းခါေနတယ္ခင္ဗ်။ MsChart ကို ေနာက္ခံ gradient ေတြဘာေတြထည့္တဲ့အခါ အရမ္းကိုေလးသြားတယ္ခင္ဗ်။
ဒါနဲ႔ ကၽြန္ေတာ္ panel တစ္ခုထဲကို ထည့္ေဆာက္ၿပီး myform.Designer.cs side မွာ စမွတ္ေန ဆိုဒ္ေတြေၾကညာၿပီး ေအာက္ ပံုစံနဲ႔ series ေတြကို ေပါင္းထည့္ပါတယ္ခင္ဗ်။ panel တစ္ခုမွာပဲ ဆြဲထည့္လိုက္တာေပါ့ခင္ဗ်ာ။
private void drawchartx(double[] tran)
{
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint1 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(0, tran[1]);
System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint2 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(1, tran[2]);
series1.Points.Add(dataPoint1);
series1.Points.Add(dataPoint2);
this.chart2.Series.Add(series1);
this.chart2.Location = new System.Drawing.Point(0,0);
this.chart2.Size = new System.Drawing.Size(450, 255);
this.panel4.Controls.Add(chart2);
}
ျပႆနာကေတာ့ ထည့္လိုက္တဲ့ အေခါက္တိုင္းအတြက္ clear မေပးတတ္တာခင္ဗ်။ ကၽြန္ေတာ္က Datapoint 9 ခုမွာ series 5 ခုေတာင္ျဖည့္ထားေတာ့ မၾကာခင္မွာပဲ ၁၀၀ ၀န္းက်င္ Y scale ဟာ ေထာင္ေသာင္းခ်ီၿပီး ေလးက်လာေတာ့တာပါပဲ။ this.Controls.Remove(this.chart1); မ်ိဳနဲ႔လည္း ရွင္းမရဘူးခင္ဗ်ာ။ ကၽြန္ေတာ့္အေနနဲ႔လိုေနတာက Datapoint ေတြကို သုညအျဖစ္ ခ်ျပစ္လိုက္ခ်င္တာပဲခင္ဗ်။ double[] tran အေနနဲ႔ကေတာ့ ျပႆမရွိဘူးထင္တယ္ခင္ဗ်။ သူ႔ကို DataGridview မွာ ေကာင္းေကာင္းသံုးလို႔ရတယ္ခင္ဗ်။ Public နဲ႔သံုးထားတယ္ခင္ဗ်။ အဓိကက this.SuspendLayout(); မသံုးဘဲ MSchart ကို reset ဘယ္လိုခ်မလဲဆိုတာ ကူညီ အေျဖရွာေပးေစခ်င္ပါတယ္ခင္ဗ်ာ။
ေပ်ာ္ရႊင္ဖြယ္ႏွစ္သစ္ျဖစ္ပါေစခင္ဗ်ာ။ စာေတြလည္း လာဖတ္ေနပါတယ္ခင္ဗ်။ ေက်းဇူးလည္းတင္ပါတယ္ခင္ဗ်ာ။
Comment by KoPaKhan — January 4, 2012 @ 8:24 AM