PDA

View Full Version : مبتدی: مشکل در ایجاد Textbox عددی



kami.awz
چهارشنبه 18 آبان 1390, 04:37 صبح
سوال ۴ فصل ۵ کتاب سی‌شارپ قمی اینه که دو تا عدد ۱۰۰ رقمی رو جمع بزنیم و فیلدهای تکست فقط محتوای عددی بگیرن.
مشکل در ایجاد تسکت‌باکسیه که فقط عدد بگیره، تمام راه‌های موجود واسه اینکار رو امتحان کردم، از راه‌هایی که اینجا معرفی شده، تا دنی‌وب و استک‌آورفلو و ... منتها جواب نگرفتم، یعنی همچنان توی تکست‌باکس‌ها میتونم حروف رو وارد کنم! مبتدی هستم و نمیدونم که مشکل از کجای کده، اگر از دوستان کسی زحمت مرورش رو بکشه ممنون میشم :)
آخرین کدی که استفاده کردم این بوده:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace S5T4
{
public partial class mainForm : Form
{
public mainForm()
{
InitializeComponent();
}

private void firstNum_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsLetter(e.KeyChar))
{
e.Handled = true;
}
}

private void secondNum_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsLetter(e.KeyChar))
{
e.Handled = true;
}
}

private void calcButton_Click(object sender, EventArgs e)
{
int[] first = new int[100];
int[] second = new int[100];
int[] result = new int[100];
string resultPrint = "";
int temp, carry = 0;

if (firstNum.Text.Length == 100 && secondNum.Text.Length == 100)
{
for (int n = 0; n < first.Count(); n++)
{
first[n] = firstNum.Text[n] - '0';
second[n] = secondNum.Text[n] - '0';
}

for (int i = first.Count() - 1; i >= 0; i--)
{
temp = first[i] + second[i] + carry;
result[i] = temp % 10;
carry = temp / 10;

if (i == 0)
{
result[i] = temp;
}
}

for (int j = 0; j <= result.Count() - 1; j++)
{
resultPrint += result[j].ToString();
}

MessageBox.Show(resultPrint);
}
else
MessageBox.Show("Please insert two 100 digits numbers");
}
}
}

uniqueboy_ara
چهارشنبه 18 آبان 1390, 07:45 صبح
چرا از MaskTextBox استفاده نمیکنی؟؟؟

ace_sina
چهارشنبه 18 آبان 1390, 09:41 صبح
تو رویداد KeyPress اون تکست باکسی که میخوای فقط عدد توش چاپ بشه ، کد زیر رو وارد کن :

if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back))
e.Handled = true;

amjtia
چهارشنبه 18 آبان 1390, 09:51 صبح
تو رویداد KeyPress اون تکست باکسی که میخوای فقط عدد توش چاپ بشه ، کد زیر رو وارد کن : تا ممیز هم کار کنه
if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)46))
e.Handled = true;

kami.awz
چهارشنبه 18 آبان 1390, 13:53 عصر
چرا از MaskTextBox استفاده نمیکنی؟؟؟

راستش واحد برنامه‌سازی پیشرفته‌م رو با این کتاب تدریس میکنن و ظاهرا باید با رویدادها کنترل بشه.


تو رویداد KeyPress اون تکست باکسی که میخوای فقط عدد توش چاپ بشه ، کد زیر رو وارد کن :

if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back))
e.Handled = true;


تو رویداد KeyPress اون تکست باکسی که میخوای فقط عدد توش چاپ بشه ، کد زیر رو وارد کن : تا ممیز هم کار کنه
if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)46))
e.Handled = true;

ممنون دوستان، متاسفانه جواب ندادن، خیلی کد امتحان کردم ولی واقعا نمیفهمم چرا جواب نمیده!

AliRezaPro
چهارشنبه 18 آبان 1390, 18:09 عصر
if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back))
{
e.Handled = true;
}
else
{
e.Handled = false;
}

hamirayan
چهارشنبه 18 آبان 1390, 19:41 عصر
سوال ۴ فصل ۵ کتاب سی‌شارپ قمی اینه که دو تا عدد ۱۰۰ رقمی رو جمع بزنیم و فیلدهای تکست فقط محتوای عددی بگیرن.
مشکل در ایجاد تسکت‌باکسیه که فقط عدد بگیره، تمام راه‌های موجود واسه اینکار رو امتحان کردم، از راه‌هایی که اینجا معرفی شده، تا دنی‌وب و استک‌آورفلو و ... منتها جواب نگرفتم، یعنی همچنان توی تکست‌باکس‌ها میتونم حروف رو وارد کنم! مبتدی هستم و نمیدونم که مشکل از کجای کده، اگر از دوستان کسی زحمت مرورش رو بکشه ممنون میشم :)
آخرین کدی که استفاده کردم این بوده:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace S5T4
{
public partial class mainForm : Form
{
public mainForm()
{
InitializeComponent();
}

private void firstNum_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsLetter(e.KeyChar))
{
e.Handled = true;
}
}

private void secondNum_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsLetter(e.KeyChar))
{
e.Handled = true;
}
}

private void calcButton_Click(object sender, EventArgs e)
{
int[] first = new int[100];
int[] second = new int[100];
int[] result = new int[100];
string resultPrint = "";
int temp, carry = 0;

if (firstNum.Text.Length == 100 && secondNum.Text.Length == 100)
{
for (int n = 0; n < first.Count(); n++)
{
first[n] = firstNum.Text[n] - '0';
second[n] = secondNum.Text[n] - '0';
}

for (int i = first.Count() - 1; i >= 0; i--)
{
temp = first[i] + second[i] + carry;
result[i] = temp % 10;
carry = temp / 10;

if (i == 0)
{
result[i] = temp;
}
}

for (int j = 0; j <= result.Count() - 1; j++)
{
resultPrint += result[j].ToString();
}

MessageBox.Show(resultPrint);
}
else
MessageBox.Show("Please insert two 100 digits numbers");
}
}
}


سلام کافیه در رویداد key press این تکه کد رو بنویسی:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar < '0' || e.KeyChar > '9')
{
e.Handled = true;
}
}

kami.awz
پنج شنبه 19 آبان 1390, 21:10 عصر
ممنون از دوستان، ولی مشکل حل نشد، همونطور که گفتم مشکل از کد نیست، جاییه که من ازش سر در نمیارم، واقعا نمیفهمم چرا اجرا نمیشه. کسی از دوستان این کد رو ران کرده ببینه جواب میده یا نه؟ :متفکر:

sobaisobai
پنج شنبه 19 آبان 1390, 21:27 عصر
سلام
کد زیر رو تو KeyPress تکست باکست بنویس
if (!(char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar)))
{
e.Handled = true;
}

omidh2007
پنج شنبه 19 آبان 1390, 22:41 عصر
یا اول کد صفحت بنویس : txt_Person_CardMelli_Code.KeyDown += new KeyEventHandler(IsNumber);
بعد تابع زیر رو استفاده کن . :چشمک:


public void IsNumber(object sender, KeyEventArgs e)
{
if ((e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) &&
(e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9) &&
e.KeyCode != Keys.Back && e.KeyCode != Keys.Delete &&
e.KeyCode != Keys.Tab && e.KeyCode != Keys.Right && e.KeyCode != Keys.Left)

e.SuppressKeyPress = true;
}


در ضمن اگه از دوستان یکی ، User Control مربوط به این رو بسازه ممنونش میشم .

uniqueboy_ara
جمعه 20 آبان 1390, 01:50 صبح
از این استفاده کن جواب میده
if (!Char.IsDigit(e.KeyChar))
{

e.Handled = true;

}

xiox_ziza
جمعه 20 آبان 1390, 01:51 صبح
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !(Char.IsNumber(e.KeyChar) || Char.IsControl(e.KeyChar));
}

kami.awz
جمعه 20 آبان 1390, 21:53 عصر
ممنون، ولی بازم جواب نداد :|

sobaisobai
جمعه 20 آبان 1390, 22:02 عصر
کدی که نوشتی رو بذار تا ببینیم چرا جواب نمیده

kami.awz
جمعه 20 آبان 1390, 22:10 عصر
صفحه اول گذاشتم کامل

electro_esma
جمعه 20 آبان 1390, 22:11 عصر
دوست من

نگاه کن این یه پروژه سادست واست نوشتم یه نگاه بنداز ببین که داره با همین کد های ساده کار می کنه و هیچ چیز به جز عدد نمی شه وارد کرد.

لینک (http://www.upload4files.tk/download.php?file=0c9e7f163850262b1e2cf79d4be6d432 )

sobaisobai
جمعه 20 آبان 1390, 22:12 عصر
مشکل نداره که
ارور میده؟یا تغییرات اعمال نمیشه؟

electro_esma
جمعه 20 آبان 1390, 22:13 عصر
اینم شکلش

شاید بدرد بخوره

77735

kami.awz
جمعه 20 آبان 1390, 22:31 عصر
فایلی که فرستاده بودید رو تست کردم کار میکنه ولی همچنان کد خودم کار نمیکنه! :|
اروری نمیگیرم ولی حروف هم داخل تسکت‌باکس‌ها تایپ میشه، بر خلافی چیزی که توی کد خواستم

sobaisobai
جمعه 20 آبان 1390, 22:34 عصر
کد رویداد keyPress تکست باکست رو بذار

amin mohamadi
جمعه 20 آبان 1390, 22:41 عصر
بنویس توی keypress تکس باکست من همیشه همین کارو میکنم جواب هم میده

if ((e.KeyChar != (char)8) && (!char.IsDigit(e.KeyChar)))
e.Handled = true;

kami.awz
شنبه 21 آبان 1390, 00:29 صبح
خب! قضیه جالب شد، فایلی که دوستمون گذاشته بود بدون مشکل کار میکنه. زمانی که تکست‌باکس جدید اضافه میکنم و کد رو مینویسم تکست‌باکس جدید حروف هم میپذیره ولی تکست‌باکس‌هایی که از قبل هستن مشکلی ندارن و فقط عدد میگیرن!
کجای این قضیه ایراد داره، نمیدونم!

روند کار اینه که: یه تکست‌باکس اضافه میکنم، بعد میرم توی کد فرم و یه رویداد کی‌پرس واسه تکست‌باکس مینویسم، شما کاری غیر از این میکنید؟ :متفکر:

سوداگر
شنبه 21 آبان 1390, 00:54 صبح
روند کار اینه که: یه تکست‌باکس اضافه میکنم، بعد میرم توی کد فرم و یه رویداد کی‌پرس واسه تکست‌باکس مینویسم، شما کاری غیر از این میکنید؟
بله!
شما اینبار از پنجره ی Properties سمت راست، رویداد KeyPress رو پیدا کن و حتماً روی آن دو بار کلیک کن، فایلهای دیگری هستند که باید کد مربوط به رویداد، در اونها هم معرفی بشن، با دابل کلیک روی این رویداد از پنجره Properties مشکلت بر طرف میشه چون ویژوال استودیو خودش این کد رو اضافه میکنه، دور از چشمان شما!
همه دوستان تقریباً روی یک کد، اتفاق نظر دارند!

در کل، مشکلت اینجاست:
یه رویداد کی‌پرس واسه تکست‌باکس مینویسم

کد کی پرس رو خودت ننویس، درست میشه.

kami.awz
شنبه 21 آبان 1390, 02:05 صبح
هولی شت، درست شد
ممنون آقا ^_^