PDA

View Full Version : خطا در ساخت و استفاده از کنترل‌ سفارسی



razavi_university
شنبه 17 فروردین 1387, 12:23 عصر
سلام
مدتی پیش یک کنترل سفارشی TextBox برای کار با مقادیر پولی درست کردم. الان که قصد تغییرش رو داشتم. DLL تولید شده هنگام اضافه شده به فرم‌های دیگر برای استفاده (زمانی که از ToolBox بر روی فرم می‌کشیم)خطاهای بدی می‌دهد که اصلا ازش سر در نیاوردم:عصبانی++:
حتی یک پروژه جدید هم ایجاد کردم و کدها رو توش ریختم ولی نشد.
کد و تصاویر خطاها رو ضمیمه کردم(البته هر دو خطا با هم نمی‌یاد گاهی خطای اول گاهی خطای دوم). خودم که نفهمیدم مشکل کجاست:اشتباه::افسرده:

sinpin
شنبه 17 فروردین 1387, 12:57 عصر
سلام
مدتی پیش یک کنترل سفارشی TextBox برای کار با مقادیر پولی درست کردم. الان که قصد تغییرش رو داشتم. DLL تولید شده هنگام اضافه شده به فرم‌های دیگر برای استفاده (زمانی که از ToolBox بر روی فرم می‌کشیم)خطاهای بدی می‌دهد که اصلا ازش سر در نیاوردم:عصبانی++:
حتی یک پروژه جدید هم ایجاد کردم و کدها رو توش ریختم ولی نشد.
کد و تصاویر خطاها رو ضمیمه کردم(البته هر دو خطا با هم نمی‌یاد گاهی خطای اول گاهی خطای دوم). خودم که نفهمیدم مشکل کجاست:اشتباه::افسرده:

در این پراپرتی :

public override string Text
{
get
{
return base.Text;
}
set
{
// del strCrncySymbol = "ریال" if exist
if (value.IndexOf(strCrncySymbol) > 0)
{
value = value.Replace(strCrncySymbol, String.Empty);
}

// del strCrncyGrpSep = "," if exist
if (value.IndexOf(strCrncyGrpSep) > 0)
{
value = value.Replace(strCrncyGrpSep, String.Empty);
}

// convert value to "#,#" style without decimal point
value = decimal.Parse(value).ToString("#,#");

//add strCrncySymbol = "ریال" to value
value = value.Insert(value.Length, strCrncySymbol);

base.Text = value;
}
}
کد قرمز شده رو با کدی مانند کد زیر تعویض کنید :

decimal d;
decimal.TryParse(value, out d);
value = d.ToString("#,#");

razavi_university
شنبه 17 فروردین 1387, 13:12 عصر
ممنون از توجهت
میشه دلیل بروز این خطا رو هم واسم بگی

sinpin
شنبه 17 فروردین 1387, 13:17 عصر
ممنون از توجهت
میشه دلیل بروز این خطا رو هم واسم بگی
خواهش میکنم.
اولا چون تاپیک حل شده اعلام نشده، مطمئن نیستم که آیا مشکلتون واقعا حل شد یا نه ؟

در هر صورت، شما اگه یک messagebox توی اون کد بزارید خودتون متوجه میشید :

// convert value to "#,#" style without decimal point
MessageBox.Show(value);
value = decimal.Parse(value).ToString("#,#"); و معمولا جاهایی که صحت مقدار یک متغیر با شک و تردید همراه است بهتره برای کانورت کردن از tryParse بجای parse استفاده بشه :
http://barnamenevis.org/forum/showpost.php?p=469001

razavi_university
یک شنبه 18 فروردین 1387, 01:01 صبح
چون اون موقع Visual Studio دم دستم نبود نمی‌تونستم تست کنم و ببینم درست شده یا نه؟
ولی وقتی تست کردم درست شد.:بوس:
البته به این نتیجه هم رسیدم که بهتره واسه کل عملیاتی که در Set انجام میدیم یک شرط بگذاریم و Null بودن و یا خالی بودن اون رو چک کنیم (چون در هنگام استفاده یه جایی که اصلا مقداری وارد نمی‌کردم برنامه وارد Set می‌شد با مقدار Null برای Value)
ممنون از راهنماییتون:قلب:
فقط یک سوال دیگه در همین رابطه:
در قسمت Build برای آن یک آیکون انتخاب می‌کنم ولی زمانی که به ToolBox اضافه میشه بازهم همون آیکون پیش‌فرض خودش رو داره. برای تعویض آیکونش باید چه کرد؟


نسخه آپدیت شده این کنترل هم در قسمت "نمونه‌برنامه های آماده" قرار داده شد.

sinpin
یک شنبه 18 فروردین 1387, 05:47 صبح
در قسمت Build برای آن یک آیکون انتخاب می‌کنم ولی زمانی که به ToolBox اضافه میشه بازهم همون آیکون پیش‌فرض خودش رو داره. برای تعویض آیکونش باید چه کرد؟
به این پست مراجعه کنید :
http://barnamenevis.org/forum/showpost.php?p=492744