raha1234567
شنبه 16 مرداد 1389, 13:12 عصر
گاهی اوقات می خواهید کاربر شما فقط اجازه وارد کردن عدد در کنترل شما را داشته باشد و نتواند حروف و علائم را وارد کند.
برای این مسئله دو حالت را در نظر می گیرم
1- کنترل شما از نوع textbox است در این صورت در رویداد keypress دستورات زیر را بنویسید C#.Net
if (Char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back)
e.Handled = false;
else
e.Handled = true;
VB.Net
If (Char.IsDigit(e.KeyChar) Or e.KeyChar = Convert.ToChar(Keys.Back)) Then
e.Handled = False
Else
e.Handled = True End If
2- کنترل شما از نوع datagridview است در این حالت نمی توان از رویداد keypress همانند بالا عمل کرد زیرا رویداد keypress کنترل datagridview در هنگام وارد کردن اعداد در cell ها فراخوانی نمی شود برای حل این مشکل باید ابتدا تابعی را به صورت زیر تعریف کرد: C#.Net
private void validatecell(object sender, KeyPressEventArgs e)
{
if (Char.IsDigit(e.KeyChar) || e.KeyChar==(char)Keys.Back)
e.Handled = false;
else
e.Handled = true; }
VB.Net
Private Sub validatecell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If Asc(e.KeyChar) <> 13 AndAlso Asc(e.KeyChar) <> 8 AndAlso Not IsNumeric(e.KeyChar) Then
e.Handled = True
End If End Sub
حال در رویداد EditingControlShowin کنترل datagridview دستورات زیر را بنویسید:
C#.Net
Control control = dataGridView1.EditingControl;
TextBox textbox = (TextBox)control;
if (dataGridView1.CurrentCell.ColumnIndex == 0)
{
if (control is TextBox)
{
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress += new KeyPressEventHandler(validatecell);
}
}
else
{
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress -= new KeyPressEventHandler(validatecell); }
VB.Net
If (DataGridView1.CurrentCell.ColumnIndex = 0) Then
RemoveHandler e.Control.KeyPress, AddressOf validatecell
RemoveHandler e.Control.KeyPress, AddressOf validatecell
AddHandler e.Control.KeyPress, AddressOf validatecell
Else
RemoveHandler e.Control.KeyPress, AddressOf validatecell
RemoveHandler e.Control.KeyPress, AddressOf validatecell End If
موفق باشید.
برای این مسئله دو حالت را در نظر می گیرم
1- کنترل شما از نوع textbox است در این صورت در رویداد keypress دستورات زیر را بنویسید C#.Net
if (Char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back)
e.Handled = false;
else
e.Handled = true;
VB.Net
If (Char.IsDigit(e.KeyChar) Or e.KeyChar = Convert.ToChar(Keys.Back)) Then
e.Handled = False
Else
e.Handled = True End If
2- کنترل شما از نوع datagridview است در این حالت نمی توان از رویداد keypress همانند بالا عمل کرد زیرا رویداد keypress کنترل datagridview در هنگام وارد کردن اعداد در cell ها فراخوانی نمی شود برای حل این مشکل باید ابتدا تابعی را به صورت زیر تعریف کرد: C#.Net
private void validatecell(object sender, KeyPressEventArgs e)
{
if (Char.IsDigit(e.KeyChar) || e.KeyChar==(char)Keys.Back)
e.Handled = false;
else
e.Handled = true; }
VB.Net
Private Sub validatecell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If Asc(e.KeyChar) <> 13 AndAlso Asc(e.KeyChar) <> 8 AndAlso Not IsNumeric(e.KeyChar) Then
e.Handled = True
End If End Sub
حال در رویداد EditingControlShowin کنترل datagridview دستورات زیر را بنویسید:
C#.Net
Control control = dataGridView1.EditingControl;
TextBox textbox = (TextBox)control;
if (dataGridView1.CurrentCell.ColumnIndex == 0)
{
if (control is TextBox)
{
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress += new KeyPressEventHandler(validatecell);
}
}
else
{
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress -= new KeyPressEventHandler(validatecell);
textbox.KeyPress -= new KeyPressEventHandler(validatecell); }
VB.Net
If (DataGridView1.CurrentCell.ColumnIndex = 0) Then
RemoveHandler e.Control.KeyPress, AddressOf validatecell
RemoveHandler e.Control.KeyPress, AddressOf validatecell
AddHandler e.Control.KeyPress, AddressOf validatecell
Else
RemoveHandler e.Control.KeyPress, AddressOf validatecell
RemoveHandler e.Control.KeyPress, AddressOf validatecell End If
موفق باشید.