نمایش نتایج 1 تا 7 از 7

نام تاپیک: وارد شدن فقط عدد در VB و C#‎‎.net

  1. #1

    وارد شدن فقط عدد در VB و C#‎‎.net

    گاهی اوقات می خواهید کاربر شما فقط اجازه وارد کردن عدد در کنترل شما را داشته باشد و نتواند حروف و علائم را وارد کند.
    برای این مسئله دو حالت را در نظر می گیرم
    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



    موفق باشید.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آبان 1386
    محل زندگی
    قم
    پست
    657

    نقل قول: وارد شدن فقط عدد در VB و C#‎‎‎.net

    نقل قول نوشته شده توسط raha1234567 مشاهده تاپیک
    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 وارد کنه .

  3. #3

    نقل قول: وارد شدن فقط عدد در VB و C#‎‎‎‎.net

    نقل قول نوشته شده توسط mahdi_7610 مشاهده تاپیک
    دستور اول یک مشکلی داره .

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

  4. #4
    کاربر دائمی
    تاریخ عضویت
    آبان 1386
    محل زندگی
    قم
    پست
    657

    نقل قول: وارد شدن فقط عدد در VB و C#‎‎‎‎‎.net

    نقل قول نوشته شده توسط raha1234567 مشاهده تاپیک
    سلام
    نمی دونم چطور باید نوشت ولی فکر کنم اگر بتونیم دستور 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;
    }

  5. #5

    نقل قول: وارد شدن فقط عدد در VB و C#‎‎‎‎‎‎.net

    نقل قول نوشته شده توسط mahdi_7610 مشاهده تاپیک
    سلام

    بفرمائید

               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;
    }

    خیلی ممنون از کمکتون .

  6. #6

    نقل قول: وارد شدن فقط عدد در VB و C#‎‎.net

    یک راه سادشم اینه کد زیر رو بنویس


    Clipboard.Clear();

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  7. #7

    نقل قول: وارد شدن فقط عدد در VB و C#‎‎‎.net

    نقل قول نوشته شده توسط mmd2009 مشاهده تاپیک
    یک راه سادشم اینه کد زیر رو بنویس


    Clipboard.Clear();

    بازم ممنون از کمکتون

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •