PDA

نسخه کامل مشاهده نسخه کامل : يه مشكل عجيب



Nakh0d4
13-07-2010, 14:59
من يه برنامه دارم تو VB.netكه كه 4 تا فرم داره ولي وقتي به فرم 4 مي رم و با دكمه‌ي Back به عقب بر ميگردم اندازه فرم 3 كوچك ميشه يعني فقط همون titlebar نشون داده ميشه؟ كسي مي دونه چرا؟ و اينكه چجوري اين مشكلو رفع كنم
Private Sub Btn_Back_page4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Back_page4.Click
Me.Hide()
Page3.Show()
End Sub

Nakh0d4
14-07-2010, 05:39
واي خداي من اعصابم داره خرد ميشه:41:

Public Lumen, Number_lamp_Buble As Int16
Public NumBer_lamp As Int16
dim index as int16=0

Delta_Fi = ((fi - ((NumBer_lamp + index) * Number_lamp_Buble * Lumen)) / fi) * 100

ايا ميشه اين خط OverFlowException بده؟ ولي داره ميده كسي ميدونه چزا؟
lumen=2900 و NumBer_lamp=8
fi=45186 ,number_lamp_buble=2
Delta_Fi=2%

عــــلی
19-07-2010, 15:02
سلام دوست عزیز.
سوالاتون یه خورده عجیب به نظر میرسه.
اگه مشکل سوال اولتون حل نشده لطفاً کدهاتونو بزارید.
در مورد سوال دوم هم باید بگم بستگی به داده های ورودی داره.
شما از Int16 استفاده کردید.میتونید از Int32 یا Int64 استفاده کنید.

موفق باشید.

bad_boy_2007
20-07-2010, 19:48
سوال اولت کمی مبهمه ولی دومی مشکل از شماست .

نوع داده Int16 به میزان 2 به توان 16 یعنی 65536 برای داده های بدون علامت و 32767 برای داده های علامت دار ذخیره میکنه .

تبدیل نوع ، همونطور که میدونید در VB بر خلاف C# تبدیل نوع ها بصورت ضمنی انجام میشود و باید کمی با دقت بیشتر به نوع داده ها توجه کرد . شیوه تبدیل نوع در VB به این صورت است که کامپایلر بصورت اتومات نوع داده بزرگتر را به صورت نوع داده تبدیل شده محاسبه میکند .

چند مثال :

Dim Int16_2 as Int16
dim Int16_1 as Int16
Dim DBL as Doubl

int_16*int_16 ---> int16
Int16 * DBL ---> Double
int_16/2 ----> int16
int_16/2.2 ----> Double
int_16*int_16 ----> int_16


ابتدا باید این عبارت محاسبه شود :
((NumBer_lamp + index) * Number_lamp_Buble * Lumen))

نتیجه محاسبه فوق باید در نوع داده Int16 ذخیره شود که باتوجه به اینکه بزرگتر از 32767 میشود پس نتیجه محاسبات منجر به OverFlow خواهد شد .

راهکار :
1- ابتدا تقسیم را نجام دهید ، سپس ضرب را
2-نتیجه محاسبه ضرب را در نوع داده بزرگتر ذخیره کنید (یا از تبدیل نوع های ضمنی استفاده کنید Ctype - CDouble و ...)