مشكل در ويرايش فرم c++.net

sara_she

Member
سلام
من يه پروژه winformapplication از نوع net.‌دارم كه با c++.net‌ايجاد شده

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

an error acuured while loading the document . fix
the error and then try loading the document a again the error message follows
: MCppCodeDOMParser Error

اما موقع اجرا مشكلي نداره و امكان ويرايش كد هم وجود داره تنها نمي شه فرم رو تو محيط vs‌ديد و ويرايش كرد
 

sara_she

Member
بازم سلام

من به يه چيزي پي بردم كه نمي دونم درسته يا نه . فكر مي كنم وقتي كه به( void InitializeComponent(void
چيزي اضافه مي كنم چنين مشكلي پيش مي ياد مثلا وقتي oleDbConnection1->Open() رو به انتهاي اين روال اضافه مي كنم اين مورد رو تو جستجوهام پيدات كردم:
for no apparent reason when trying to open a form in designer mode the
following
error is occuring:

'An error occurred when loading the document. Fix the error and reload the
document. The error message follows:
MCppCodeDomParser error'

The solution still builds and runs ok and controls can be added or modified
programatically but no 'designer' facility available.
There might be some lines of code in the InitializeComponent method of your
Form that cannot be parsed back by the Form Designer.
Have you added yourself some lines of code to this method?
If yes, I would suggest you to comment them out step by step until the Form
Designer reopens again. It may help you find out the lines that cannot be
parsed.

اگر درست فكر مي كنم بگين من بايد open كردن connection رو كجا قرار بدم كه مجبور نباشم تو هر روال مثل كليك دكمه كه با بانك كار دارم اونو باز و انتهاي روال اونو ببندم؟ تو vb.net من اين كد رو تو قسمت pageload مي گذلشتم و مشكلي هم پيش نمي اومد

اگر درست نيست بگين مشكل لود فرم چطور حل مي شه و اصلا چرا پيش مي ياد
ممنون از توجه تون
 
آخرین ویرایش:

saalek110

Well-Known Member
من قضیه ای که گفتید را تست نکردم ولی نکته دیگری را می گویم.
کلا فکر می کنم هر چه سریع تر کانکشن بسته بشه بهتر است.
اما برای اینکه مدام تایپ نشه کدهای کانکت شدن... می شود یک تابع ساخت و باز کردن و خواندن و بستن دیتابیس را در آنجا انجام داد و مثلا کوئری را ارسال کنیم به این تابع. و در سی پلاس چون ساختن استرینگ بیلدر هم دردسر دارد ... اگر ساخت کوئری هم آنجا انجام شود بهتر است. که مثلا نام ستون و مقداری که باید با آن ستون مقایسه شود را به این تابع ارسال می کنیم و در این تابع هم کوئری ساخته می شود و هم دیتابیس باز می شود و هم خوانده می شود و هم همان جا فورا کانکشن بسته می شود.
البته گاهی ممکنه کوئری سازی به این شکل مشکل باشه و یا اصلا نشود انجام داد. ولی به عنوان یک ایده گفتم شاید به کار بیاید.
اما در مورد محل ایجاد شی کانکشن( و استرینگ آن) ... بعد از روالهای اساسی بنویسید.
کد:
		void InitializeComponent(void)
		
		static String *connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\\ClassProjects.mdb";      
		static OleDbConnection *myConnection = new OleDbConnection(connectionString);
در کد بالا من بعد InitializeComponent نوشتم. که گفت باید استاتیک باشد من هم استاتیک کردم. برنامه بالا بی خطا اجرا شد. و در باتون هم OleDbConnection را توانستم رویداد open اش را فرابخوانم ولی کوئری اجرا نکردم. حد تست کردن من در این حد بود. در ویژوال سی ++ دات نت 2003 .
 
آخرین ویرایش:

sara_she

Member
سلام دوباره

من براي OPENكردن connection اونو تو قسمت لود فرم 'گذاشتم
کد:
private: System::Void winform_Load(System::Object *  sender, System::EventArgs *  e)
		 {
			  oleDbConnection1->Open();
		 }
فعلا براي زماني كه فرم دارم كار مي كنه چون از همان زمان لود شدن فرم ارتباط برقرار مي شه . همونطور كه قبلأ هم گفتم من براي ايجاد Connection از متد new‌و تعريف رشته اتصال استفاده نمي كنم و به جاي اون با انتخاب oledbdataadapter و ساخت اون connection‌به صورت خودكار همراهش ايجاد مي شه .و من تو كد فقط نياز به open‌كردن اون دارم كه اونم نمي تونم تو قسمت void InitializeComponent(void) بذارم به همون دليلي كه قبلا گفتم .
با تشكر
موفق باشيد
 
آخرین ویرایش:

sara_she

Member
مشكل حل شد
بايد به صورت زير عمل كنيم:

کد:
public:
  Form1(void)
  {
      String* myConnString = S"connection string"
                    oleDbConnection1 = new OleDbConnection(myConnString);
      oleDbConnection1->open();
  }
.
.
.
 private:
  OleDbConnection* oleDbConnection1;

در واقع من با گذاشتن كد اتصال در initial باعث تغيير در designer شده بودم. زماني كه کنترلی رو فرمتون اضافه میکنین در Designer کدی به برنامه اضافه میشه . برای اینکه در هنگام Load شدن فرمتون بتونین کدی رو اجرا کنین باید اون رو در مثلا در Constructor کلاس
Form قرار بدین. مثلا در جایی که TODO قرار گرفته مثل كد بالا و نوشته زير :

کد:
public:
Form1(void)
**
InitializeComponent();
//
//TODO: Add the constructor code here
//

وقتي متغییر رو public تعریف میکنین و اولین بار در متود Form از اون یه نمونه میسازین و بعد میتونین از این نمونه در سایر متود ها استفاده کنین. وقتی Field ی رو به صورت private تعریف کنین فقط در کلاس مورد نظر دیده میشه. اگه بخواین از این Field در سایرکلاسها استفاده کنین ، امکانش وجود نداره.بنابراین وقتی Field مورد نظر رو به صورت private تعریف کنین

اين نمونه ها رو هم تو جستجوهام پيدا كردم:

for no apparent reason when trying to open a form in designer mode the
following
error is occuring:

'An error occurred when loading the document. Fix the error and reload the
document. The error message follows:
MCppCodeDomParser error'

The solution still builds and runs ok and controls can be added or modified
programatically but no 'designer' facility available

There might be some lines of code in the InitializeComponent method of your
Form that cannot be parsed back by the Form Designer.
Have you added yourself some lines of code to this method?
If yes, I would suggest you to comment them out step by step until the Form
Designer reopens again. It may help you find out the lines that cannot be
parsed.
 

saalek110

Well-Known Member
البته شما مشکل را حل کردید. ولی برای من هم این قضیه که اشیا کجا باید تعریف بشوند مهم بود که در پستی که در زیر معرفی می کنم مقداری به جواب خود رسیدم.

پست 4 این تاپیک . شاید ایده بده. وی سی 2003 . از همان سورسهای میکروسافت.
 

جدیدترین ارسال ها

بالا