PDA

View Full Version : خطای FormatException در کنترلی که از TextBox مشتق شده



alireza4474
دوشنبه 27 دی 1395, 18:29 عصر
سلام من یه یوزر کنترل درست کردم که از کلاس textBox ارثبری میکنه و کارش اینه که اجازه نده کاربر چیزی جز عدد وارد کنه تنها کد هایی که زدم اینه

void DigitTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsDigit(e.KeyChar) || (int)e.KeyChar == 8 || e.KeyChar == '-'))
{
e.Handled = true;

PlayError();

return;
}
if ((int)e.KeyChar != 8)
{
if (SelectedText.Length > 0)
{
int startSelecting = SelectionStart;

string beforeErasingText, afterErasing;

beforeErasingText = SelectionStart > 0 ? Text.Substring(0, Text.Length - SelectionStart) : "";

afterErasing = Text.Substring(SelectionStart + SelectionLength,

Text.Length - (SelectionStart + SelectionLength));

if (long.Parse(beforeErasingText + e.KeyChar + afterErasing) > MaxValue)
{
e.Handled = true;

PlayError();

return;
}
}
else
{
if (long.Parse(Text + e.KeyChar) > MaxValue)
{
e.Handled = true;

PlayError();

return;
}
}
}

if ((SelectionLength == Text.Length || Text.Length == 1) && (int)e.KeyChar == 8)
{
e.Handled = true;

Text = "0";

SelectAll();
}
}

void DigiTextBox_TextChanged(object sender, EventArgs e)
{
Text = long.Parse(Text).ToString();

long TextValue = long.Parse(Text);

if ((TextValue > MaxValue))
{
Text = MaxValue.ToString();

SelectAll();

return;
}
if (TextValue < 0 && TextValue < -1 * TextValue)
{
Text = (-1 * MaxValue).ToString();

SelectAll();

return;
}
}
long _maxValue = 1000000000000000000;
public long MaxValue
{
get
{
return _maxValue;
}
set
{
_maxValue = value;
}
}

مشکل من اینجاست که ویژوال اصلا اجازه نمیده من اینو توی فرم اد کنم و این ارور رو میده

144158
ممنون از راهنمایی هاتون

ژیار رحیمی
دوشنبه 27 دی 1395, 21:40 عصر
مشکل از Constructor کلاس هست شما فقط کدهای دو تابع TextChangeو KeyPress گزاشتی.پست بالا رو ویرایش و کدهای کامل کلاس رو بزار.اگر قبل از کد نویسی تو انجمن یه جستجویی میکردی هم نمونه کامپوننت که دوستان گذاشتن پیدا میکردی هم نمونه کد تا اینکه مجدد شما کد بنویسی

alireza4474
چهارشنبه 29 دی 1395, 08:33 صبح
مشکل از Constructor کلاس هست شما فقط کدهای دو تابع TextChangeو KeyPress گزاشتی.پست بالا رو ویرایش و کدهای کامل کلاس رو بزار.اگر قبل از کد نویسی تو انجمن یه جستجویی میکردی هم نمونه کامپوننت که دوستان گذاشتن پیدا میکردی هم نمونه کد تا اینکه مجدد شما کد بنویسی
این همه کد ها:
http://s2.picofile.com/file/8282851734/DigitTextBox.rar.html

بازم ممنون از راهنماییتون

ژیار رحیمی
چهارشنبه 29 دی 1395, 10:33 صبح
تست شد مشکلی نداشت.شما بهتره در یک فرم دیگر یا پروژه دیگر کامپوننت خودتو تست بزنی

alireza4474
پنج شنبه 30 دی 1395, 09:33 صبح
من در اصل یه کامپوننت یا همون dll درست کردم و به پروژه هام اضافه میکنم در اصل این کاری که شما میگید رو قبلا هم رو سیستم خودم هم روی یه سیستم دیگه امتحان کردم اما مشکل سر جاش هست

Mahmoud.Afrad
پنج شنبه 30 دی 1395, 12:05 عصر
به جای متد Parse از متد TryParse استفاده کنید.

alireza4474
شنبه 02 بهمن 1395, 11:42 صبح
مشکل از اینجا نیست

Mahmoud.Afrad
شنبه 02 بهمن 1395, 13:56 عصر
مشکل از اینجا نیست

چیزی که بنده گفتم رو انجام دادید؟ نتیجه چی بود؟
بعد از تغییر Parse به tryparse ، کدهاتون به چه صورت دراومد؟ کدهای جدیدتون رو بزارید.

alireza4474
یک شنبه 03 بهمن 1395, 10:14 صبح
اقا مشکل حل شد کد های رویداد TEXTCHANGE رو برداشتم توی KEYPRESS جادادم مشکلش حل شد