PDA

View Full Version : سوال: مشکل در اجرای پروژه بعد از نصب مجدد Visual Studio 2008 و اجرای برنامه VB.NET



mgh64120
سه شنبه 10 آذر 1388, 16:52 عصر
با عرض سلام و خسته نباشید
من در ادامه تعویض ویندوز ، Visual Studio 2008 رو روی سیستم نصب کردم.
ولی در اجرای پروژه ام که با Vb.Net هست دچار مشکل شدم و برنامه ERROR میده.
فکر کنم راجع به Module باشه. ماژولم در لیست SolutionExplorer هست و در فرم های دیگر توابع موجود در ماژولم قابل دسترس است و همچنین برنامه Build میشه ولی موقع اجرا و نمایش فرم اصلی که از یکی از توابع موجود در این ماژول استفاده میشه پیغام زیر رو میده :


The type initializer for 'WindowsApplication1.Module1' threw an exception.


اگه ممکنه راهنماییم کنید. :افسرده::عصبانی++:

http://barnamenevis.org/forum/c:\ERROR.jpg

mgh64120
سه شنبه 10 آذر 1388, 20:04 عصر
منتظر راهنمايي هاي سازنده عزيزان هستم. ممنون!
:متفکر:

mgh64120
چهارشنبه 11 آذر 1388, 17:05 عصر
پروژم خوابيده اگه ممكنه راهنماييم كنيد!
:ناراحت: :افسرده: :عصبانی++: :گریه:

ACorvinus
چهارشنبه 11 آذر 1388, 19:46 عصر
سلام .

یه Sample از پروژه رو بذارین و بگین کی این اتفاق بیافته تا جواب بگیرین .
سوال شما سوالی نیست که همه باهاش درگیر شده باشن .

موفق باشین .

mgh64120
پنج شنبه 12 آذر 1388, 20:20 عصر
سلام .

یه Sample از پروژه رو بذارین و بگین کی این اتفاق بیافته تا جواب بگیرین .
سوال شما سوالی نیست که همه باهاش درگیر شده باشن .

موفق باشین .

متاسفانه پروژم رو نميتونم بذارم(حجم زياد)
همانطور كه توضيح دادم وقتي فرم اصلي لود ميشه يه تابع رو فراخواني ميكنه كه اين تابع در ماژول (Module) قرار داره و اگر فراخواني اين تابع را در فرم اصلي حذف كنم به موارد ديگري كه در ماژول هست Error ميده مثلا متغيرهاي فراگير درون ماژول يا توابع ديگر موجود در ماژول

در ادامه بگويم كه عنوان WindowsAppliction1 كه در پيغام خطا آمده مربوط RootNameSpace
پروژه است و عنوان Module1 هم كه ماژول برنامه ام هست.

فكر كنم كه توضيحاتم روشن باشه. منتظر راهنمايي هاي شما عزيزان هستم. :متفکر:

ACorvinus
پنج شنبه 12 آذر 1388, 20:37 عصر
سلام دوباره .

من نگفتم تمام پروژه رو Upload کنین .

فقط ماژول رو بزارین و بگین در Form_Load چی کار می کنین که این اتفاق می افته ؟
همین .

موفق باشین .

mgh64120
پنج شنبه 12 آذر 1388, 20:50 عصر
سلام دوباره .

من نگفتم تمام پروژه رو Upload کنین .

فقط ماژول رو بزارین و بگین در Form_Load چی کار می کنین که این اتفاق می افته ؟
همین .

موفق باشین .

دويت عزيز به همه توابع Error ميده. فكر كنم با خود ماژول مشكل داره.
فكر كنم شما فكر ميكنيد كه روتين من ايراد داره؟
باشه اينم روتين و رويداد فرم :




Module Module1
Public blnAdd As Boolean = False

Public MEShamsi As New MEShamsiDate.ShamsiDate
Public objConnection As SqlConnection
Public StrVahed As String

'

Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Long) As IntPtr
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As IntPtr) As Integer
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As IntPtr) As Boolean
'

Private Const MF_BYPOSITION = &H400
Private Const MF_REMOVE = &H1000
Private Const MF_DISABLED = &H2
Public Sub DisableCloseButton(ByVal hwnd As IntPtr)
Dim hMenu As IntPtr
Dim menuItemCount As Integer
'

'Obtain the handle to the form's system menu

hMenu = GetSystemMenu(hwnd, False)
'

'Obtain the number of items in the menu

menuItemCount = GetMenuItemCount(hMenu)
'

'Remove the system menu Close menu item.

'The menu item is 0-based, so the last

'item on the menu is menuItemCount - 1

Call RemoveMenu(hMenu, menuItemCount - 1, _
MF_DISABLED Or MF_BYPOSITION)
'

'Remove the system menu separator line

Call RemoveMenu(hMenu, menuItemCount - 2, _
MF_DISABLED Or MF_BYPOSITION)
'

'Force a redraw of the menu. This

'refreshes the titlebar, dimming the X

Call DrawMenuBar(hwnd)
End Sub

End Module

اينم رويداد فرم



Private Sub frmMain_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated
DisableCloseButton(Me.Handle)
End Sub

ACorvinus
پنج شنبه 12 آذر 1388, 22:43 عصر
خوب .

با اینکه حدس میزدم این کد در PC من بدون خطا اجرا میشه ولی بازم تمایل داشتم ببینم میخوای چی کار کنی .

این کد شما در ControlBox فرم کلید Close رو غیر فعال می کنه .
دوست من استفاده از Module در اینجور موارد درست نیست چون یه روش بهتر از اینم وجود داره و اون این که شما یه فرم دیگه درست کنین و دستوراتی که این عمل رو انجام میدن (عمل غیر فعال کردن دکمه بستن فرم) رو در اون فرم بنویسین .

نتیجه: شما یک فرمی دارین که هیچ کنترلی نداره و فقط در بخش کدنویسیش از چند تا توابع API و چند تا متغیر و یه روال که Private هستش رو داره که این روال از رویداد HandleCreated همون فرم فراخوانی میشه .

تا اینجا که مشکلی نداریم .

حالا هر فرمی که میخواین دکمه Close اون غیر فعال باشه دیگه لزومی نداره در رویداد HandleCreated اون، روالی که در Module نوشتین رو فراخوانی کنین . کافیه از فرمی که ایجاد کردین ارث بری کنین . (این عمل باعث میشه که حتی در حالت Design هم دکمه Close غیرفعال باشه !!!)

برای ارث بری از فرم ایجاد شده، بر روی فرمی که میخواین از "فرم ایجاد شده" ارث ببره، کلیک کرده و F7 رو فشار بدین، از Class Name Combobox نام فرم رو انتخاب کنین و حالا از قسمت
Method Name Combobox گزینه InitializeComponent رو انتخاب کنین .

بعد از انتخاب این گزینه صفحه ای باز میشه که کدهایی در اون نوشته شده، به ابتدای کدها رفته و سطر سوم که به این صورت هستش:


Inherits System.Windows.Forms.Form


رو به:


Inherits YourCreatedFormName


تغییر دهید که در اینجا YourCreatedFormName همون فرمی هست که میخواین ازش ارث ببرین . حالا میتونین به فرم خودتون برگشته و تغغییرات رو مشاهده کنین .


اگه بازم مشکلی بود بگین . موفق باشین .

mgh64120
جمعه 13 آذر 1388, 17:57 عصر
دوست عزيز ممنون از راهنمايي مفيد شما
اما من توي ماژولم تنها اين روتين رو ندارم بلكه توابع و متغيرهاي زيادي دارم كه اونها رو براتون نگذاشتم.
از جمله DLL مربوط به تاريخ شمسي.
مشكل و سوال اصلي من اينه كه چرا يه پروژه كه توي يه سيستم درست كار ميكرده و بعد از تعويض سيستم عامل و نصب مجدد ويژوال بايد پيغام خطا بده ؟؟؟ (بدون هيچ تغييري !)
يعني اگر كسي مجبور باشه از ماژول توي برنامه اش استفاده كنه بايد با اين مشكل مواجه باشه؟
بازهم تشكر ميكنم از راهنمايي و توجه و زماني رو كه براي اين حقير گذاشتيد.
و اين رو بگم كه اگر من اين روتين رو پاك كنم، به تابع يا متغير يا روتين فراگير ديگه اي كه كل برنامه ازش استفاده ميكنه و لازمه كه در دسترس كل برنامه باشه ERROR ميده ؟
باتشكر :چشمک:
منتظر نظرات و راهنماييتون هستم ؟

ACorvinus
شنبه 14 آذر 1388, 10:16 صبح
دوست عزيز ممنون از راهنمايي مفيد شما
اما من توي ماژولم تنها اين روتين رو ندارم بلكه توابع و متغيرهاي زيادي دارم كه اونها رو براتون نگذاشتم.
از جمله DLL مربوط به تاريخ شمسي.
مشكل و سوال اصلي من اينه كه چرا يه پروژه كه توي يه سيستم درست كار ميكرده و بعد از تعويض سيستم عامل و نصب مجدد ويژوال بايد پيغام خطا بده ؟؟؟ (بدون هيچ تغييري !)
يعني اگر كسي مجبور باشه از ماژول توي برنامه اش استفاده كنه بايد با اين مشكل مواجه باشه؟
بازهم تشكر ميكنم از راهنمايي و توجه و زماني رو كه براي اين حقير گذاشتيد.
و اين رو بگم كه اگر من اين روتين رو پاك كنم، به تابع يا متغير يا روتين فراگير ديگه اي كه كل برنامه ازش استفاده ميكنه و لازمه كه در دسترس كل برنامه باشه ERROR ميده ؟
باتشكر :چشمک:
منتظر نظرات و راهنماييتون هستم ؟

شما چرا از Class استفاده نمی کنین ؟
البته همون طور که گفتم من اینی که شما گفتین رو در Win-7 امتحال کردم و درست کار کرد.

شما از یه کلاس استفاده کنین و هربار که میخواین از توابع موجود در کلاس استفاده کنین از این کلاس یه Instance گرفته و کارتون رو را بندازین .

برای مثال اگر در کلاس xClass یه تابع به اسم Y دارین که تاریخ شمسی رو برمیگردونه؛ این کارو انجام بدین.



Dim xClassInstance As New xClass

Me.DateTextBox.Text = xClassInstance.Y


اگه بازم مشکلی بود بفرمائین . راستی سیستم عامل شما چیه ؟

mgh64120
دوشنبه 16 آذر 1388, 17:03 عصر
با عرض سلام خدمت شما دوست گرامي
ابتداً خدمت شما عرض كنم كه متاسفانه به دليل پايين بودن سطح كامپيوترم از ويندوز XP استفاده ميكنم.
براي استفاده از كلاس من نياز به كمك شما دارم.
اگه ممكنه يه نمونه استفاده از DLL و يه نمونه استفاده از متغير فراگير رو در كلاس برام بزاريد. و همينطور نحوه استفاده كد غيرفعال كردن دكمه Close فرم كه در بالا براتون گذاشتم.
ممنون از راهنماييتون!
من نمونه هاي خودم رو ميزارم اگه ممكنه اونا رو تبديل كنيد
نمونه ي DLL :



Public MEShamsi AsNew MEShamsiDate.ShamsiDate
' طريقه استفاده

Text1.Text = MEShamsi.Today



و نمونه متغير فراگير :



Public objConnection As SqlConnection
'طريق استفاده

objConnection = New SqlConnection("server=localhost;database=Master;user id=sa;password=12345;")



ضمناً در ضميمه، DLL رو براتون گذاشتم.
در پناه حق باشيد.

ACorvinus
چهارشنبه 18 آذر 1388, 20:49 عصر
سلام .

ببخشین من فکر می کردم جوابتون رو گرفتین .
اینم نمونه برنامه : 40971
تاریخ شمسی هم در داخلش هست .

ولی منظورتون رو از متغیر فراگیر نفهمیدم !!! یعنی چی که متغیر فراگیر ؟!

mgh64120
شنبه 21 آذر 1388, 09:18 صبح
منظورم از متغير فراگير، متغيري است كه در ماژول به صورت Public تعريف ميشود تا در اختيار كل فرمهاي پروژه قرار گيرد.

hamid_khakzad
سه شنبه 24 آذر 1388, 23:57 عصر
با عرض سلام خدمت دوست عزیز
من هم چند روز پیش دقیقا با مشکلی که الان شما دارین برخورد کردم
من تو برنامم یه ماژول داشتم و یه سری روتین و تابع یه صورت public داخلش تعریف کرده بودم و در فرم های دیگه از این روتین ها و توابع استفاده می کردم

برنامه ای که نوشتم رو سیستم خودم هیچ مشکلی نداشت ولی وفتی رو سیستم مشتری فریم ورک را نصب می کردم و برنامه را اجرا می کردم ارور Dont Send بهم می داد که دقیقا وقتی دیباگ می کردم با پیغام خطای type initializer مواجه می شدم
بعد از کلی تلاش و کلنجار رفتن به این نتیجه رسیدم که فریم ورکی که روی سیستم مشتری نصب بود را پاک کنم و فریم ورکی که خودم روی فلش داشتم و روی سیستم خودم هم نصب بود را روی سیتم مشتری نصب کنم و بعد از این کار دقیقا مشکلم حل شد

اگه راهنمایی بیشتر خواستین در خدمتتون هستم