PDA

View Full Version : سوال: محدود کردن کاربر برای وارد کردن کاراکتر در #C



hessam2003
سه شنبه 24 بهمن 1391, 13:57 عصر
سلام.
من میخوام درون text.box کاربر فقط عدد وارد کنه.
در VB تابعی به نام Isnumeric وجود داره اما در #C چجوری این کارو میشه مدیریت کرد؟

Alfred188
سه شنبه 24 بهمن 1391, 14:36 عصر
درود، از این می تونید کمک بگیرید
int i = 0;
string X=2;
if (int.TryParse(X, out i))
{
MessageBox.Show("good");
}
else
MessageBox.Show("bad");

erfan_urchin
سه شنبه 24 بهمن 1391, 16:09 عصر
از این کد میتونین استفاده کنین
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar)))
{
e.Handled = true;
}
}

hessam2003
سه شنبه 24 بهمن 1391, 20:04 عصر
سلام erfan_urchin (http://barnamenevis.org/member.php?267050-erfan_urchin) عزیز.
این کدی که زحمت کشیدید گذاشتید را توضیح مختصر میدید؟

danialafshari
سه شنبه 24 بهمن 1391, 20:34 عصر
زبونم مو در اورد از بس گفتم MaskedTextBox در لیست ToolBox وجود داره و خاصیت mask رو روی Numeric بزارید
کد های بالا حرف درون آنها با Copy/Paste قرار می گیرد :عصبانی++:

erfan_urchin
سه شنبه 24 بهمن 1391, 21:17 عصر
زبونم مو در اورد از بس گفتم MaskedTextBox در لیست ToolBox وجود داره و خاصیت mask رو روی Numeric بزارید
کد های بالا حرف درون آنها با Copy/Paste قرار می گیرد :عصبانی++:
:لبخند: دانیال جان عصبی نشو :لبخند:
آقای دانیال درست میگن این کدی که من گذاشتم یه اشکال داره و اونم اینه که شما با Copy/Paste میتونین داخل TextBox حروف وارد کنین.
اما میتونین از ابزار maskedTextBox هم استفاده کنید و در قسمت Property و از گزینه Mask میتونی numeric رو انتخاب کنی تا فقط خاصیت عددی بگیره
اما مشکلی که هست وقتی numeric رو انتخاب میکنی فقط 5 رقم میتونی وارد کنی اما تو همون پراپرتی Mask با اضافه کردن تعداد صفر ها میتونین به هر تعداد که میخواین رقم وارد کنین
و مشکل دیگه خطیه که تو MaskedTextBox میکشه اونو نمیشه حذف کرد اما میتونین تو پراپرتی ، با true کردن HidePromptOnLeave ، اون خط رو Hide کنید

erfan_urchin
سه شنبه 24 بهمن 1391, 21:50 عصر
سلام erfan_urchin (http://barnamenevis.org/member.php?267050-erfan_urchin) عزیز.
این کدی که زحمت کشیدید گذاشتید را توضیح مختصر میدید؟
اما حسام جان اگه براتون مهم نیست که با Copy/Paste بشه تو TextBox حروف وارد کرد یا نه ، یا حتما تمایل دارید از TextBox استفاده کنید ، میتونین از همون کدی که دادم استفاده کنید
توضیح خاصی هم نداره ، شما باید برین از قسمت پراپرتی TextBox و روی KeyPress دابل کلیک کنید و اون کدها ی بالا رو توش بنویسین

erfan_urchin
سه شنبه 24 بهمن 1391, 21:56 عصر
من الان یه سرچ کردم تو فروم و یه کدی گیر آوردم که یه ذره طولانیه اما میتونین با این کد تو textbox کاری کنید که حتی با Copy/Paste نشه حروف وارد کرد
البته یه ذره کدش پیچیدس
public partial class Form1 : Form
{
private bool _isFormmating = false;
private bool _isControlDown = false;

public Form1()
{
InitializeComponent();
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
if (_isFormmating == false)
{
_isFormmating = true;
textBox1.Text = FormatText(textBox1.Text);
_isFormmating = false;
}
}

private string FormatText(string unformattedText)
{
StringBuilder formattedText = new StringBuilder(unformattedText.Length);
int i = 0;
while (i < unformattedText.Length)
{
if (unformattedText[i] >= '0' && unformattedText[i] <= '9')
formattedText.Append(unformattedText[i]);
i++;
}
return formattedText.ToString();
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!_isControlDown)
if (e.KeyChar != '\b' && (e.KeyChar < '0' || e.KeyChar > '9'))
e.Handled = true;
}

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode & Keys.ControlKey) == Keys.ControlKey)
_isControlDown = true;
}

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
_isControlDown = false;
}

}

r_s1389@yahoo.com
سه شنبه 24 بهمن 1391, 22:06 عصر
من الان یه سرچ کردم تو فروم و یه کدی گیر آوردم که یه ذره طولانیه اما میتونین با این کد تو textbox کاری کنید که حتی با Copy/Paste نشه حروف وارد کرد
البته یه ذره کدش پیچیدس
public partial class Form1 : Form
{
private bool _isFormmating = false;
private bool _isControlDown = false;

public Form1()
{
InitializeComponent();
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
if (_isFormmating == false)
{
_isFormmating = true;
textBox1.Text = FormatText(textBox1.Text);
_isFormmating = false;
}
}

private string FormatText(string unformattedText)
{
StringBuilder formattedText = new StringBuilder(unformattedText.Length);
int i = 0;
while (i < unformattedText.Length)
{
if (unformattedText[i] >= '0' && unformattedText[i] <= '9')
formattedText.Append(unformattedText[i]);
i++;
}
return formattedText.ToString();
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!_isControlDown)
if (e.KeyChar != '\b' && (e.KeyChar < '0' || e.KeyChar > '9'))
e.Handled = true;
}

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode & Keys.ControlKey) == Keys.ControlKey)
_isControlDown = true;
}

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
_isControlDown = false;
}

}
خدا خیرتون بده

danialafshari
چهارشنبه 25 بهمن 1391, 00:56 صبح
به جای این همه کد و این همه رویداد همون maskedTextBox باشه بهتره. ولی این کد بدرد ساخت کامپوننت می خوره :چشمک:

khokhan
چهارشنبه 25 بهمن 1391, 01:09 صبح
با سلام به همه

بفرما اینم dll همون تکس باکس

daneshjo90
پنج شنبه 26 بهمن 1391, 01:53 صبح
شما مثل اینکه ول کن این کامپوننت عزیزتون نیستین ؟

دوستان توجه فرمائید کاموننت دوست عزیزم بهتر از MaskedTextBox خود ویژوال استدیو هست

حتما اونو پاک کرده واینو به جاش اضافه کنید

موفق باشی عزیز دلم