PDA

View Full Version : سوال: لود شدن فرم بدون نمایش آن



titipop1
دوشنبه 25 خرداد 1394, 20:45 عصر
درود دوستان
امیدوارم همیشه سالم و سلامت در کنار خانواده محترم باشین
دوستان گلم یه فرم دارم(فروش) و یه فرم دارم (انبار) حالا شرط اینکه فروش از انبار کسر بشه اینه که ابتدا فرم انبار لود بشه و سپس از طریق فرم انبار به فرم فروش رفته و در نهایت فروش و کسر از انبار(تا اینجا انجام میشه)،حالا راهی هست که بدون نیاز به لود شدن فرم انبار،فروش از انبار کسر بشه یا حداقل فرم انبار مخفی بمونه یا یه پیشنهاد بهتر از طرف شما دوستان.
ممنون از لطف دوستان

Aqeel95
دوشنبه 25 خرداد 1394, 20:53 عصر
من که خیلی مبتدی ام تو #C
میتونی فرم انبار رو لود کنی وبعد تو Form load اون ، visible اون رو false کنی ...
اما به پیشنهاد دیگر اساتید بیشتر توجه کن!!!!!!

titipop1
دوشنبه 25 خرداد 1394, 21:08 عصر
دوست عزیز بابت پیشنهادتون ممنون اما چون من از طریق فرم انبار به فرم فروش دسترسی دارم روش شما امکان پذیر نیست

titipop1
سه شنبه 26 خرداد 1394, 20:08 عصر
دوستان پیشنهاد ندارن؟

RmeXXXXXXXXX
سه شنبه 26 خرداد 1394, 21:23 عصر
دوست عزیز هر فرمی یک کلاس است. شما تا صریحاً متد Show یا ShowDialog و امثالهم را صدا نزنید هیچ فرمی نمایش داده نمیشود.!
پس: برای هدف شما باید یک متد بصورت عمومی (public) در فرم (یا همون کلاس) انبار تعریف کنید که کار مد نظرتون رو انجام بده سپس در فرم اول یک نمونه از فرم انبار بسازید و بدون Show کردن متد ساخته شده رو صدا بزنید.
مثلاً در فرم انبار متدی بنام public void DoMyWork(){} تعریف کنید
در فرم اول:
var frm=new frmAnbar();
frm.DoMyWork();
البته اینچنین باید یه سری ملاحضات رو در نظر بگیرین مثلاً اطلاعات باید حتمن لود بشن.
----------
اگر دقت کرده باشین برای انجام یک کار به دو فرم نیاز است. این یعنی وابستگی و اصل تک مسئولیتی رعایت نشده است. اشتراک های دو فرم را دریک کلاس جدید پیاده کنید.

titipop1
چهارشنبه 27 خرداد 1394, 13:29 عصر
مهندس جان میشه بفرمایید اطلاعات رو چطور لود کنم؟اگه اطلاعات لود بشن احتمالا با اون متد شما جواب میده.

davidrobert
چهارشنبه 27 خرداد 1394, 14:42 عصر
مهندس جان من راهی که خیلی ساده برای شما دارم استفاده از عمل انومالی هستش من خوب در فاکتور فروش وقتی جنس رو میفروشم با یه فرم هم بدهی مشتری رو معلوم میکنم بدکار یا نه و فروش انجام دادم هزینه هاش رو بررسی کردم و بدکار بودنش رو و وقتی اینها تمام شد امدم کالا انبار رو کم کردم که موجودی انبار به دست امد.
یعنی شما باید رابطه انومالی رو خوب بلد باشید و کالا انبار رو با بارکد اوردید شناسه همون کالا رو هم بیارید از انیار یعنی وقتی کالا فروش رفت در جدوال فروش همون دقیقه انبار کالا هم ویرایش بشه یعنی در یک ستون دیتاگرید ویو تعداد کالا کل یک کالا رو بیارید و در یک سلول تعداد فروش وارید کنید و در سلول موجودی تعداد کالا انبار که این تعداد موجودی انبار جای موجودی قبلی میشنه و وقتی تعریف خرید میکنی از موجودی قبلی کم و به موجودی جدید قرار میگیره و وقتی روی ذخیره میزنید اطلاعات ذخیره و موجودی انبار ویرایش و نیاز به فرم انبار نیست.

titipop1
چهارشنبه 27 خرداد 1394, 20:57 عصر
مهندس ما از ابتدا انبار رو جدا طراحی کردیم و راه بازگشتی نداریم:لبخندساده:

pbm_soy
پنج شنبه 28 خرداد 1394, 03:02 صبح
نمیدونم هدف دقیقتون چیه! کمی غیر منطقی میاد چیزی که میگی ولی همون پست اول که یکی از دوستان جواب دادن کمی نمیکنه؟ مثلا

در form_load خصوصیت visible فرم را false کنی و همونجا هم فرم بعدیت که فروش است باز کنی!
اینطوری فرم انبار بطور کامل لود میشه ولی مخفی است و همینطور فرم فروشت هم دیده میشه!
البته فکر میکنم اگه فرم فروش را ببندی فرم انبار احتمالا ظاهر میشه (اگه فروش را بصورت دیالوگ نمایش دهی) مگر اینکه در خروج فروش هردو فرم را ببندی!

jeson_park
پنج شنبه 28 خرداد 1394, 12:51 عصر
دوست عزیز شما از فرم یه نمونه بساز
Form1 f = new Form1();
تا مند show صدا زده نشه ، فرم نمایش داده نمی شه
می تونید داده هاش رو فراخوانی کنید

titipop1
جمعه 29 خرداد 1394, 10:08 صبح
با تشکر از دوستان خوبم جناب پیبیم و جیسون هردو روشتون رو امتحان کردم ارور داد،خطا از لاینی میده که من از طریق اون به فرم انبار دسترسی پیدا میکنم در واقع چون فرم انبار فعال نیست نمیتونه به گریدویو اون دسترسی داشته باشه(مد نظر بنده دسترسی به اون گریدویو درون فرم انبار هستش که بطبع باید فرم انبار لود بشه)

alireza264
جمعه 29 خرداد 1394, 10:39 صبح
با تشکر از دوستان خوبم جناب پیبیم و جیسون هردو روشتون رو امتحان کردم ارور داد،خطا از لاینی میده که من از طریق اون به فرم انبار دسترسی پیدا میکنم در واقع چون فرم انبار فعال نیست نمیتونه به گریدویو اون دسترسی داشته باشه(مد نظر بنده دسترسی به اون گریدویو درون فرم انبار هستش که بطبع باید فرم انبار لود بشه)

سلام
اگه درست متوجه شده باشم دوتا دیتابیس داری برای هرکدومش یه ConncetionString جدا بزار و اطلاعات انبار رو داخل فرم فروش بخون و فقط داخل DataTable نگه دار و نمایش نده و عملیات تغییر رو داخل Datatable انجام بده و بعد Datatable رو مجددا تو دیتابیس بنویس
در ضمنا برای دسترسی به گریدویو فرم دیگه باید خصوصیت Modifiers گریدویو رو Public کنی

titipop1
جمعه 29 خرداد 1394, 10:53 صبح
سلام مهندس
من یک دیتابیس دارم و از دیتاست (ویزارد) استفاده میکنم

alireza264
جمعه 29 خرداد 1394, 13:15 عصر
سلام
اوکی. حالا متوجه شدم. من تا بحال از ویزارد استفاده نکردم اما دو سه تا راه حل به ذهنم رسید
1- میتونی همزمان از Ado استفاده کنی و اطلاعات انبار رو داخل فرم فروش بخون و فقط داخل DataTable نگه دار و نمایش نده و عملیات تغییر رو داخل Datatable انجام بده و بعد Datatable رو مجددا تو دیتابیس بنویس
2- تو دیتاست ویزارد راست کلیک کن و با استفاده از گزینه ADD یک Query برای Select یکی هم برای update جدول انبار بساز و اونا رو هم تو فرم فروش فراخوانی کن
132390
3- هر دیتاست میتونه حاوی چند تا table باشه و جدول انبار رو رو هم همزمان پر کنی

DataSet dset = new DataSet();
dset.Tables[0] .Select())
dset.Tables[1].Select(

4- برای استفاده از روش دوستان که بالاتر گفته شده بایستی خصوصیت Modifiers گریدویو فرم دیگه رو باید Public کنی بعد به صورت زیر بهش دسترسی داشته باشی

Form2 frm2 = new Form2();
frm2.dataGridView1.Rows[1]

titipop1
جمعه 29 خرداد 1394, 18:54 عصر
مهندس جان بله کوئری کسر از انبار رو تو فرم فروش فراخوانی میکنم منتها فقط و فقط شرط اجرای این کوئری اینه که فرم انبار لود باشه،من در فرم فروش از طریق یه سازنده به فرم انبار دسترسی دارم فقط همانطور که در بالا اشاره کردم مشگل اینجاست که شرط کسر فروش به این بستگی داره که فرم انبار همزمان لود بشه حالا راهی میخوام که بدون لود شدن فرم انبار به داده های اون دسترسی داشته باشم.
کد دسترسی به گریدویو انبار:
((if((int)frmMain.dataGridView1.Rows[0].Cells[4].Value > int.Parse(textBox2.Text
frmMain سازنده جهت دسترسی به گرید موجود در فرم انبار(Modifire=Public)

alireza264
شنبه 30 خرداد 1394, 01:02 صبح
مهندس جان بله کوئری کسر از انبار رو تو فرم فروش فراخوانی میکنم منتها فقط و فقط شرط اجرای این کوئری اینه که فرم انبار لود باشه،من در فرم فروش از طریق یه سازنده به فرم انبار دسترسی دارم فقط همانطور که در بالا اشاره کردم مشگل اینجاست که شرط کسر فروش به این بستگی داره که فرم انبار همزمان لود بشه حالا راهی میخوام که بدون لود شدن فرم انبار به داده های اون دسترسی داشته باشم.
کد دسترسی به گریدویو انبار:
((if((int)frmMain.dataGridView1.Rows[0].Cells[4].Value > int.Parse(textBox2.Text
frmMain سازنده جهت دسترسی به گرید موجود در فرم انبار(Modifire=Public)

سلام
خدا وکیلیش خیلی پیچده شده
اگه opacity فرم انبار رو صفر کنی و بعد Show کنی شاید مشکل حل بشه
هر چند که من توصیه می کنم طراحی رو عوض کنی چون برای توسعه نرم افزارت در آینده خیلی دردسر داری

jeson_park
دوشنبه 01 تیر 1394, 08:24 صبح
من تعجب کی کنم چطوری این برنامه رو طراحی کردین
ببنید چیز هایی که توی فرم انبار هست رو صریحاً به صورت public تعریف کنید .قاعدتاً باید بتونید تو فرم دیگه بهش دسترسی پیدا کنید.این show


اگه opacity فرم انبار رو صفر کنی و بعد Show کنی شاید مشکل حل بشه

دوست عزیز اینا اصلا ربطی نداره.وقتی از رو کلاس یه نمونه بسازی راحت میشه به متدها و متغییر هاش دسترسی پیدا کرد مگر اینکه private باشه

alireza264
دوشنبه 01 تیر 1394, 09:32 صبح
من تعجب کی کنم چطوری این برنامه رو طراحی کردین
ببنید چیز هایی که توی فرم انبار هست رو صریحاً به صورت public تعریف کنید .قاعدتاً باید بتونید تو فرم دیگه بهش دسترسی پیدا کنید.این show

دوست عزیز اینا اصلا ربطی نداره.وقتی از رو کلاس یه نمونه بسازی راحت میشه به متدها و متغییر هاش دسترسی پیدا کرد مگر اینکه private باشه

سلام
دوست گرامی ایشون میخواد حتما فرمش لود بشه اما دیده نشه چون ظاهرا شرط اجرای این کوئری اینه که فرم انبار لود باشه. چون میگه " کوئری کسر از انبار رو تو فرم فروش فراخوانی میکنم منتها فقط و فقط شرط اجرای این کوئری اینه که فرم انبار لود باشه،من در فرم فروش از طریق یه سازنده به فرم انبار دسترسی دارم فقط همانطور که در بالا اشاره کردم مشگل اینجاست که شرط کسر فروش به این بستگی داره که فرم انبار همزمان لود بشه حالا راهی میخوام که بدون لود شدن فرم انبار به داده های اون دسترسی داشته باشم."

ضمنا دسترسی با خوندن مقدارش فرق میکنه چون فرم لود نشده هچ مقداری تو دیتاگرید ریخته نشده . و فقط میتونه خصوصیت ها رو بخونه
راه حلی که الان به ذهنم رسید اینه که یک نمونه از فرم انبار تعریف کن وبدون اینکه فرم رو show کنی با استفاده از نمونه دیتاگریدشو پر کن و بعد باقی مراحل

البته هرچند بنظر میاد بهتره شزط کسر فروش رو عوض کنی