PDA

View Full Version : آموزش: وارد شدن فقط عدد در VB و C#‎.net



raha1234567
شنبه 16 مرداد 1389, 12: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




موفق باشید.

mahdi_7610
شنبه 16 مرداد 1389, 13:02 عصر
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

.


دستور اول یک مشکلی داره .

کاربر میتونه حروف یا کاراکتر ها را به صورت کپی و paste وارد کنه .

raha1234567
شنبه 16 مرداد 1389, 17:49 عصر
دستور اول یک مشکلی داره .

کاربر میتونه حروف یا کاراکتر ها را به صورت کپی و paste وارد کنه .

سلام:لبخند:
نمی دونم چطور باید نوشت ولی فکر کنم اگر بتونیم دستور copy, peast را غیر فعال کنیم درست بشه
به چند تا سایت و کتاب مراجعه کردم همشون این طور نوشته بودن اگه این مشکل را بتونید حل کنید ممنون میشم:لبخندساده::خجالت:

mahdi_7610
شنبه 16 مرداد 1389, 18:21 عصر
سلام:لبخند:
نمی دونم چطور باید نوشت ولی فکر کنم اگر بتونیم دستور copy, peast را غیر فعال کنیم درست بشه
به چند تا سایت و کتاب مراجعه کردم همشون این طور نوشته بودن اگه این مشکل را بتونید حل کنید ممنون میشم:لبخندساده::خجالت:
سلام

بفرمائید


bool TextCheck = false;
bool KeyPressed = false;
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (!KeyPressed)
{
if (!TextCheck)
{
TextCheck = true;
string Text = textBox1.Text;
textBox1.Text = "";
for (int i = 0; i < Text.Length; i++)
if (Convert.ToInt16(Text[i]) > 47 && Convert.ToInt16(Text[i]) < 58)
textBox1.Text += Text[i];
textBox1.Select(textBox1.TextLength, 0);
TextCheck = false;
}
KeyPressed = false;
}
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
KeyPressed = true;
e.Handled = Char.IsDigit(e.KeyChar) == false && Char.IsControl(e.KeyChar) == false;
if (!char.IsDigit(e.KeyChar) && ((int)e.KeyChar) != 8)
KeyPressed = false;
}

raha1234567
شنبه 16 مرداد 1389, 18:38 عصر
سلام

بفرمائید


bool TextCheck = false;
bool KeyPressed = false;
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (!KeyPressed)
{
if (!TextCheck)
{
TextCheck = true;
string Text = textBox1.Text;
textBox1.Text = "";
for (int i = 0; i < Text.Length; i++)
if (Convert.ToInt16(Text[i]) > 47 && Convert.ToInt16(Text[i]) < 58)
textBox1.Text += Text[i];
textBox1.Select(textBox1.TextLength, 0);
TextCheck = false;
}
KeyPressed = false;
}
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
KeyPressed = true;
e.Handled = Char.IsDigit(e.KeyChar) == false && Char.IsControl(e.KeyChar) == false;
if (!char.IsDigit(e.KeyChar) && ((int)e.KeyChar) != 8)
KeyPressed = false;
}


خیلی ممنون از کمکتون .:چشمک:

mmd2009
شنبه 16 مرداد 1389, 23:40 عصر
یک راه سادشم اینه کد زیر رو بنویس



Clipboard.Clear();

raha1234567
یک شنبه 17 مرداد 1389, 00:41 صبح
یک راه سادشم اینه کد زیر رو بنویس



Clipboard.Clear();



بازم ممنون از کمکتون:خجالت: