PDA

View Full Version : سوال: مشکل در صدازدن یک فرم و دریافت اطلاعات از آن



rainlover
جمعه 24 مهر 1388, 09:38 صبح
من یه فرم1 دارم که یه botton1 داره. وقتی کلیک شد یه فرم2 باز می کنه که یه دیتا گرید تو اون فرم وجود داره. ضمنا فرم2 یه bottomOk داره که اگر کلیک بشه باید اطلااعات سطر جاری دیتا گرید رو بریزه تو یه آرایه رشته ای و اون رو بفرسته برای فرمی که صداش زده یعنی فرم 1.
مشکل اینجاست که من به جز نوشتن event برای این کار، راه دیگه ای بلد نیستم. یعنی وقتی روی ok در فرم2 کلیک میشه من سطر جاری رو اطلاعاتش رو بر میدارم میذارم تو یه آرایه رشته ای. اما نمیدونم چطور این رو به فرم1 بفرستم چون even کلیک که return value نداره.
خیلی عجله ایست
ممنون میشم کمک کنید

اَرژنگ
جمعه 24 مهر 1388, 10:37 صبح
من یه فرم1 دارم که یه botton1 داره. وقتی کلیک شد یه فرم2 باز می کنه که یه دیتا گرید تو اون فرم وجود داره. ضمنا فرم2 یه bottomOk داره که اگر کلیک بشه باید اطلااعات سطر جاری دیتا گرید رو بریزه تو یه آرایه رشته ای و اون رو بفرسته برای فرمی که صداش زده یعنی فرم 1.
مشکل اینجاست که من به جز نوشتن event برای این کار، راه دیگه ای بلد نیستم. یعنی وقتی روی ok در فرم2 کلیک میشه من سطر جاری رو اطلاعاتش رو بر میدارم میذارم تو یه آرایه رشته ای. اما نمیدونم چطور این رو به فرم1 بفرستم چون even کلیک که return value نداره.
خیلی عجله ایست
ممنون میشم کمک کنید

۱.چرا عجله‌ایست؟ ۲.اگر برایه مدرسه است، مگر این چیزی را که میپرسید یاد نمیدن؟

rainlover
جمعه 24 مهر 1388, 14:24 عصر
۱.چرا عجله‌ایست؟ ۲.اگر برایه مدرسه است، مگر این چیزی را که میپرسید یاد نمیدن؟
به نظر میرسه واسه مدرسه باشه؟
تو کدوم مدرسه C# رو اون هم از نوع فرم و استفاده از دیتا گرید ویو در اون به بچه ها درس میدن؟
اگه گفتم عجله ایه چون می خواستم این پروژه رو تا اذان ظهر به کسی نشون بدم که اینجاش گیر کردم.
در ثانی واسه شما چه فرقی می کنه که عجله ای باشه یا نه؟

اَرژنگ
جمعه 24 مهر 1388, 15:12 عصر
به نظر میرسه واسه مدرسه باشه؟
تو کدوم مدرسه C#‎‎‎ رو اون هم از نوع فرم و استفاده از دیتا گرید ویو در اون به بچه ها درس میدن؟
اگه گفتم عجله ایه چون می خواستم این پروژه رو تا اذان ظهر به کسی نشون بدم که اینجاش گیر کردم.
در ثانی واسه شما چه فرقی می کنه که عجله ای باشه یا نه؟
برام مهمه که درک کنم چی یاد میدن، این نوع سوالها نشان‌دهنده این است که
۱.اصول اصلی را یاد ندادند،
۲.به خرده کاری بیشتر از داشتن روشهایه کلی اهمیت داده شده.

اگر اصول را یاد میداند، ۹۰٪ درصد سوالهایی که اینجا تکرار میشند، دیگه دیده نمیشد.

در ثانی، اگر در مدرسه سی‌شارپ با فرمها را یاد نمیدن، پس چی یاد میدن؟ (این واقعا برام سوال شده که یک سنجشی از اوضاع احوال اینکه برنامه‌ریزی را در مدرسه‌ها و دانشگاه‌هایه ایران چطوری یاد میدن بدست بیارم، سوالیهایی که مداوم پرسیده میشه خصوصیت این را دارد که انگاری از اصول و فلسفه یاد نمیدن، به جاش خرده کاری را به نام برنامه‌نویسی یاد میدن، و دانشجوها به جایه اینکه پیشرفت کنند، فقط باید زحمت بکشند و آخرش هم فقط کد نویس بشند، نه برنامه نویس).
اگر کسی در مورد سان‌سو که کتاب "هنر جنگ" را نوشت، یا نیمزویچ که در شطرنج با اراعه دادن یک سیستم،شطرنج را از یک بازی فکری به یک بازی عملی تبدیل کرد میدانه با دانستن یک سیستم دیگر مداوم مشکل حل نمیکنید، بلکه فقط با استفاده از اصول راحت پیش میرید.

Himalaya
جمعه 24 مهر 1388, 19:56 عصر
ارژنگ خداییش خیلی به بحث های حاشیه ای علاقه داری... بابا جون ما که روشتو قبول کردیم (انتقال مقدار از یک فرم به فرم دیگه) حالا یا جواب طرفو بده (مثالی که 3 یا 4 روز پیش فرستاده بودی دقیقا همین چیزیه که دوستمون میخوان) یا اصلا جواب نده ... این که دیگه اینقدر صغری کبری نداره ... اینکه طرف چه جوری برنامه مینویسه (اصولی یا غیر اصولی) رو واگذار کن به خودش و خداش...:چشمک:

asefy2008
جمعه 24 مهر 1388, 22:41 عصر
ارژنگ خداییش خیلی به بحث های حاشیه ای علاقه داری... بابا جون ما که روشتو قبول کردیم (انتقال مقدار از یک فرم به فرم دیگه) حالا یا جواب طرفو بده (مثالی که 3 یا 4 روز پیش فرستاده بودی دقیقا همین چیزیه که دوستمون میخوان) یا اصلا جواب نده ... این که دیگه اینقدر صغری کبری نداره ... اینکه طرف چه جوری برنامه مینویسه (اصولی یا غیر اصولی) رو واگذار کن به خودش و خداش...:چشمک:
نه خیر دوست من بهتر افراد با سابقه تر نکات رو گوش زد کنند تا بتونیم یه چیزی یاد بگیریم در غیر این صورت حضور در تایپیکها و پاسخ گویی به اون ها چه فایده ای داره؟
در ضمن شاید بنده خدا ندونه راه رو اشتباهی میره .
من که به شخص اطلاعاتم خیلی بیشتر شده تو این بحث ها .
ما در قسمت های مختلف داریم میگیم چرا افراد با سابقه تو تایپیک شرکت نمی کنند اونوقت یه نفر هم پیدا شده نکات رو گوشزد می کنه به همین سادگی دلسردش می کنین بابا دمتون گرم
عذر می خوام خارج از بحث وارد شدم ولی نمی شد

اَرژنگ
شنبه 25 مهر 1388, 03:40 صبح
ارژنگ خداییش خیلی به بحث های حاشیه ای علاقه داری... بابا جون ما که روشتو قبول کردیم (انتقال مقدار از یک فرم به فرم دیگه) حالا یا جواب طرفو بده (مثالی که 3 یا 4 روز پیش فرستاده بودی دقیقا همین چیزیه که دوستمون میخوان) یا اصلا جواب نده ... این که دیگه اینقدر صغری کبری نداره ... اینکه طرف چه جوری برنامه مینویسه (اصولی یا غیر اصولی) رو واگذار کن به خودش و خداش...:چشمک:
روش، مال من و شما نیست، اگر کسی چیزی میدونه که میتونه زندگی را برایه دیگران آسان کنه، باید ( نه این اگر دلش بخواهد) بگه و یاد بده.
اگر دانشی ، تجربه‌ای داریم، وقتی که ۶ متر زیر خاک جا گرفتیم، چه فایده‌ای خواهد داشت؟
قابلیت و انرژی انجام دادن کارهایه سطح بالا در جوانی فراوان است ولی بیچاره‌ها را به اینکه برنامه‌نویسی مقدار از یک متغییر به یک متغییر دیگر پاس دادن است و از یک فرم به یک فرم دیگر نشان دادن گرم کردن و از اصول خبری نیست.
با اصول این جوانها میتونند ۱۰۰ برابر تندتر یاد بگیرند و خودشان مسئله حل کنند و به ما هم یک چیزه جدید یاد بدن.
اگر به شکل سوالها نگاه کنید به این موضوع مداول برخورد میکنیم:
کسی در مورد سیستمی که دارد مینویسد برایه چه کاری است هیچ نمیگه و تمرکزش بر این است که بتونه مقادیر (نه مقادیری با ساختمان، بلکه مقادیری مانند رشته، عدد ، ...) را بینه فرمها پاس(!) بده و از داتابیس بگیره و در یک فرم نمایش بده.
شام بگید پرسیدن این سوالها از خودمان قبل از شروع کد کردن درست است یا نه:
۱.سیستمی که قراره بوجود بیاریم، از چه اجزائی ساخته شده ؟ چه اشیاء منطقی (Logical Entities) تشکیلش میدن؟ مثلا در همان برنامه‌ ساده مدرسه،فرضاً اگر یک دانشجو را دوبار بخواهند ثبت نام کنند" منطق جلوگیری از این عمل کجا پیاده شده؟ و اگر بعد از مدتی تغییراتی در سیستم ایجاد بشه و درست بودن این عمل نقض بشه ، چه جوری سیستم به ما اطلاع بده که یکی از قوانینی که پیاده کرده بودیم دیگر رعایت نمیشه؟
اصل برنامه نویسی، inheritance, for, while, if... نیست، حداقل داشتن : یک فرم ورک منطقی(Logical Frame Work) برایه سیستم، قابلیت تست کردن اینکه منطقی که در سیستم پیاده شده شکسته نشده (هر بار بعد از اینکه در برنامه تغییراتی ایجاد بشه باید تست بشه).
دانستن روشهایه اندازه گیری کد (Code Metrics) و اینکه کد چقدر بهم ریخته (Code Complexity) است.

ولی تا زمانی که سر دانشجوها را با : یک سیستم مدرسه‌ای بنویسید، این ویژوال استودیو و این هم شما! مشغول نگه داشتند ، به جایه اینکه اصول منطقی و حرفه‌ای را نشان بدن، مثل مهده‌کودک که خمیر بدن دست بچه ها و بگند مجسمه بسازید ، فرقش با اینکه در دانشگاه هنر خمیر بدن و بگند مجسمه بسازید چیه؟ یا دادن اصول قبل از اینکه به امان خدا ولشان کنند.

در مورد معماری لایه‌ای مقاله‌زیاد است، ولی موضوع اصلی این است که کسی که با رعایت اصول سیستم بسازه ، معماریه لایه‌ای را به شکل جنبی هم انجام میده، چونکه معماری لایه‌ای هدف نیست، هدف ساختن سیستمها با رعایت کردن اصول و داشتن منطق است.
به جایه اینکه سره مردم را با یاد گرفتن خرده کاری جمع بشه گرم کنند و به جاش حقیقت برنامه نویسی را یاد بدن.
روحانی‌هایه قرون وسطی تمام انجیلها را در لاتین نگه داشته بودند و به عامه اجازه یاد گرفتن لاتین را نمیدانند. اگر کسی انجیل ترجمه میکرد را میسوزند، به این شکل همه محتاج کلیسا مانده بودند که نتیجه‌اش هم الان این واتیکان است که از پول مردمی که در جهل نگهداشته شدند بودند ساخته شده (دستگیره‌هایه طلا، نقاشیهایه نفیس رویه سقف..).
حالا ما هم در برنامه نویسی حقیقت را از ما گرفتند، و با خورده کاری مشغولمان کردن، تازه‌کاریهای امروزی از تازه‌کارهایه ۱۰ سال پیش کمتر یاد میگیرند (از اصول دیگر جایی درس داد نمیشه)، و حتی پیدا کردن اصول در یکجا میسر نیست.
با رعاوت اصول میشه برنامه ماشین حساب نوشت که پیش نماش را بشه در وب براوزر ، کنسول ، فرم ویندوز، WPF نوشت و منطق ماشین حساب را ثابت در یکجا نگه داشت، و حتی اینکه منطق درست نوشته شده را تست کرد. این چیزی است که باید اول شروع یاد داده بشه، ولی من نمیدونم که کجا به این روش درس میدن؟ اگر کسی میدونه به من هم لطفاً اطلاع بدید.

happy65_sh
شنبه 25 مهر 1388, 09:45 صبح
آرژنگ عزيز
دقيقا حق با شماست . نمونه اش خود من ... اگه يكم از SQL SERVERشناخت اصولي تري داشتم هميشه واسه ارتباط با سرور توي برنامه ام مشكل نداشتم به قول معروف "ميوم ابروش را درست كنم ميزنم چشمش را هم كور ميكنم":لبخند:(آخه هربار كه برنامه ام را روي يه سيستم جديد نصب مي كنم يه خطاي جديد در ارتباط با سرور ميده.)
اما تنها گوشزد كردن كافي نيست شما كه بزرگتر ما هستي اگه ميشه لطف كن يه راهي هم جلوي پامون بذار :لبخندساده:
ممنون

rainlover
سه شنبه 28 مهر 1388, 19:39 عصر
من خودم جوابو پیدا کردم. فکر کنم آرژنگ عزیز هنوز متوجه نشد که من دانش آموزم یا دانش جو و اینکه این چیزارو کجا یاد میدن.
باید بگم تو دانشگاه اصول اساسی برنامه نویسی مثل شی گرایی آموزش داده میشه اونم در سطحی کلی. نمیشه وارد جزئیات شد چون وقت محدوده و اجازه نمیده. در واقع یک دید کلی نسبت به بعضی مفاهیم مهم تر ارائه میشه تا اگر کسی خودش دلش به حال خودش سوخت یا علاقه داشت یا به هر دلیل دیگر بره دنبالش. لذا من خودم اومدم تو بحث فرم ها چون برای پروژه ای که بازم خودم داوطلبانه شروع کردم، لازم دارم که با فرم ها کار کنم. حالا دیگه نمیدونم که آرژنگ یا هر کس دیگه ای که این پستو میخونه جواب سوالشو گرفته یا نه.
اما بریم سر اصل مطلب.
در فرم 1 وقتی button <انتخاب کالا> زده می شود، باید فرم 2 باز شود که حاوی یک کنترل DataGridView است که اون گریدویو هم حاوی اطلاعات کالاهاست. یعنی در هر خط یک کالا
اگر روی یکی از خط ها کلیک شده و کلید ok زده شود فرم 2 بسته میشه ومقادیر خط انتخاب شده به فرم 1(که متد SelectGood فرم را صدا زده نه show یا ShowDialog ) فرستاده می شود.
فرم 1 نیز این مقادیر را گرفته و استفاده می کند.
این کد event کلیک دکمه انتخاب مشتری در فرم 1 است:


privatevoid btnSelectGood_Click(object sender, EventArgs e)
{
DataGridViewRow objDataGridViewRow = newDataGridViewRow();
GoodViewForm GoodViewInstance = newGoodViewForm();
objDataGridViewRow = GoodViewInstance.SelectGood();
if (objDataGridViewRow != null)
{
txtGoodRef.Text = objDataGridViewRow.Cells["GoodCode"].Value.ToString();
lblGoodName.Text = objDataGridViewRow.Cells["GoodName"].Value.ToString();
lblGoodSellPrice.Text = objDataGridViewRow.Cells["GoodSellPrice"].Value.ToString();
}
}

توجه کنید ما یک دکمه در فرم 1 داریم به نام SelectGood و یه متد داریم داخل فرم 2 به همون نام. این دو رو با هم اشتباه نگیرید.
فرم 1 تابع SelectGood فرم 2 را اجرا می کند و نمایش فرم 2 را به خود فرم 2 موکول می کند. زیرا متد ShowDialog برای فرم 2 داخل خود این فرم صدا زده شده.
متد SelectGood واقع در فرم 2 هم مقدار سطر جاری از گرید ویو رو بر میگردونه.
البته قبل از آن فرم 2 در داخل تابع درونی خودش یعنی SelectGood، در خط اول این تابع،ShowDialog می شود.


publicDataGridViewRow SelectGood()
{
ShowDialog();
if (Flag == true)
return DataGridView1.CurrentRow;
returnnull;
}

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