PDA

View Full Version : چرا متد پابلیک فرم والد از تو فرم فرزند عمل نمیکنه ؟



amir-haghighi
یک شنبه 01 شهریور 1388, 15:27 عصر
به نام خدا ::

من در فرم والد یک متد به نام new_button دارم . حالا یه فرم فرزند اظافه میکنم . در رویداد closeing این فرم متد new_button رو صدا میکنم تا بیاد و در فرم اصلی یک دکمه ایجاد کنه اما این کار رو نمیکنه !

در واقع میخوام که از فرم های مختلف بتونم کنترل های فرم های دیگه رو کنترل کنم . اما نمیدونم چطوری باید این کار رو بکنم .

hozouri
یک شنبه 01 شهریور 1388, 15:48 عصر
دوست عزیز
متد new_button را به صورت static تعریف کن ...

amir-haghighi
دوشنبه 02 شهریور 1388, 18:22 عصر
به ياد او ::

عمل نميكنه ! قبلا تستش كرده بودم .

اَرژنگ
دوشنبه 02 شهریور 1388, 19:04 عصر
به نام خدا ::

من در فرم والد یک متد به نام new_button دارم . حالا یه فرم فرزند اظافه میکنم . در رویداد closeing این فرم متد new_button رو صدا میکنم تا بیاد و در فرم اصلی یک دکمه ایجاد کنه اما این کار رو نمیکنه !

در واقع میخوام که از فرم های مختلف بتونم کنترل های فرم های دیگه رو کنترل کنم . اما نمیدونم چطوری باید این کار رو بکنم .

در نگاه اول هدفتان به نظر اشتباه میاد، ولی اگر دلایلتان را بیان کنید و یک پروژه کوچک برایه مثال بفرستید شاید بشه به راه درست هدایتتان کنند.

Open-Source
سه شنبه 03 شهریور 1388, 12:29 عصر
به نام خدا ::

من در فرم والد یک متد به نام new_button دارم . حالا یه فرم فرزند اظافه میکنم . در رویداد closeing این فرم متد new_button رو صدا میکنم تا بیاد و در فرم اصلی یک دکمه ایجاد کنه اما این کار رو نمیکنه !

در واقع میخوام که از فرم های مختلف بتونم کنترل های فرم های دیگه رو کنترل کنم . اما نمیدونم چطوری باید این کار رو بکنم .


منم این مشکل رو داشتم.
اونم این بود که فهمیدم از توی فرم فرزند نمیشه هیچ کاری توی فرم پدر انجام داد.
حتی نمیشه یه تابع public رو هم call کرد.
(دستور نوشته میشه و برنامه بدون مشکل کامپایل میشه ولی نتیجه نمیده).


من این کار رو کردم.
وقتی فرم فرزند رو میبندم یه فایل Temp درست میکنم.
توی رویداد active فرم پدر وجود اون فایل temp رو چک میکنم.
اگه وجود داشت رویداد مورد نظر رو اجرا میکنم بعد فایل temp رو پاک میکنم...

این روش من بود(خودم از این کار خوشم نمیاد ولی از هیچی بهتره).

naeeme
سه شنبه 03 شهریور 1388, 13:33 عصر
شما می تونید برای رویداد formClosing فرم فرزند در فرم والد یک متد تعریف کنید. هر وقت این رویداد رخ داد، فرم والد متوجه میشه و در اون رویداد می تونید متد new_button رو فراخوانی کنید

تعریف فرم فرزند در فرم والد و نمایش آن:



Form1 frm = new Form1();
frm.MdiParent = this;
frm.FormClosing += new FormClosingEventHandler(frm_FormClosing);
frm.Show();

اَرژنگ
چهارشنبه 04 شهریور 1388, 03:07 صبح
منم این مشکل رو داشتم.
اونم این بود که فهمیدم از توی فرم فرزند نمیشه هیچ کاری توی فرم پدر انجام داد.
حتی نمیشه یه تابع public رو هم call کرد.
(دستور نوشته میشه و برنامه بدون مشکل کامپایل میشه ولی نتیجه نمیده).

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


من این کار رو کردم.
وقتی فرم فرزند رو میبندم یه فایل Temp درست میکنم.
توی رویداد active فرم پدر وجود اون فایل temp رو چک میکنم.
اگه وجود داشت رویداد مورد نظر رو اجرا میکنم بعد فایل temp رو پاک میکنم...

این روش من بود(خودم از این کار خوشم نمیاد ولی از هیچی بهتره).
خوب اگر از کاری خوشتان نمیاد چرا انجام میدید؟ دنبال راه درست چرا نمیگردید، یک مثال کوچک بفرستید راه درست را نشان بدیم.

اَرژنگ
چهارشنبه 04 شهریور 1388, 03:08 صبح
دوست عزیز
متد new_button را به صورت static تعریف کن ...

این کار درستی نیست.

sd.CSharpProgrammer
چهارشنبه 04 شهریور 1388, 10:56 صبح
سلام
دوست عزيز تاحالا دقت كردي كه تو اكثر پستهايي كه گذاشتي هميشه از سر جنگ اومدي و لحن صحبتت بسيار تند و خشن بوده؟!



چیزی که میگید اساس ندارد

شما كه اينقدر پايبند اصول و اخلاق هستيد حق نداريد بدون دليل و مدرك حرف كسي رو بي اساس بدونيد. اگه ميگيد بي اساسه خوب براش دليل بيارين نه اينكه با جملات كوبنده و تند با دوستان برخورد كنيد.



یک مثال کوچک این را نشان دبه بفرستید درستش کنیم شما را به را درست هدایت کنیم.

شما كه اينقدر ادعا مي كنيد نيازي به مثال نداريد. با خوندن پست اصلي بايد راه حل رو ارائه بديد. اگه فكر ميكنيد سطح معلوماتتون خيلي بالاست كه از بقيه دوستان با لحن بد ايراد ميگيرين احتياجي به مثال ندارين همينطوري هم ميتونين راه حل رو به دوستمون بگين.



خوب اگر از کاری خوشتان نمیاد چرا انجام میدید؟

خوب وقتي راه درستي براش پيدا نميكنه مجبوره راه حلي رو كه به ذهنش ميره (هر چقدر هم به قول شما نادرست باشه)‌ انجام بده چون همون راه نادرست مشكلش رو حل ميكنه.

دوست عزيز بهتره قبل از گفتن حرفي خوب بهش فكر كنيد نه اينكه با هر لحني كه دلتون خواست با بقيه برخورد كنيد!!!!!!!!! اينجا خيلي ها از شما پايينترند و خيلي ها بالاتر ولي دليل نميشه آدم به اونايي كه سطحشون پايينه برخورد توهين آميز داشته باشه!!!
اگه حرفامو قبول ندارين يه نگاهي به پست هاتون بندازين ببينين تو چندتاش برخورد محترمانه اي با اعضاي تالار داشتين!

ديگه صحبتي ندارم. فقط چون ديدم دوستمون هرجور عشقش ميكشه با بقيه حرف ميزنه مجبور شدم برخورد كنم. بعضي ها تا بهشون نگي آقا يا خانم فلاني رفتارت پسنديده نيست متوجه نميشن.
از مديران بخش هم عذرخواهي ميكنم اگه كمي با لحن تند حرف زدم.

با تشكر
همگي موفق باشين

Open-Source
چهارشنبه 04 شهریور 1388, 12:04 عصر
دوست عزیز اگه مرد عمل هستی بیا جلو و یه نمونه کد بزار اینجا و یه راه حل ارائه کن. اگه نیستی ملت رو سر کار نزار و بیخودی پست درپیت نده.(جناب اَرژنگ).:عصبانی:

بهتره اون آواتارت رو هم عوض کنی چون اصلا با روحیاتت جور نیست.:قهقهه:

آقای sd.CSharpProgrammer از شما تشکر میکنم.:لبخندساده:

amir-haghighi
چهارشنبه 04 شهریور 1388, 12:19 عصر
به نام خدا ::

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

با تشکر از همه دوستان ...

اَرژنگ
چهارشنبه 04 شهریور 1388, 12:25 عصر
سلام
دوست عزيز تاحالا دقت كردي كه تو اكثر پستهايي كه گذاشتي هميشه از سر جنگ اومدي و لحن صحبتت بسيار تند و خشن بوده؟!

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



شما كه اينقدر پايبند اصول و اخلاق هستيد حق نداريد بدون دليل و مدرك حرف كسي رو بي اساس بدونيد. اگه ميگيد بي اساسه خوب براش دليل بيارين نه اينكه با جملات كوبنده و تند با دوستان برخورد كنيد.

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

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



شما كه اينقدر ادعا مي كنيد نيازي به مثال نداريد. با خوندن پست اصلي بايد راه حل رو ارائه بديد. اگه فكر ميكنيد سطح معلوماتتون خيلي بالاست كه از بقيه دوستان با لحن بد ايراد ميگيرين احتياجي به مثال ندارين همينطوري هم ميتونين راه حل رو به دوستمون بگين.

منطق این چیزی را که میگید من درک نمیکنم، اینکه من در چه حد میدانم به اینکه کسی که مشکل دارد بخواد مثال بده و یا نه چه ربطی دارد؟
مثل این میماند که شما برید دکتر و اگر دکتره خیلی سطحش بالا باشد بدانه معاینه دوا بده!
اشتباه همیشگی این است که به من و تو اهمیت بدیم، به جایها اینکه به حل مسئله بپردازیم.




خوب وقتي راه درستي براش پيدا نميكنه مجبوره راه حلي رو كه به ذهنش ميره (هر چقدر هم به قول شما نادرست باشه)‌ انجام بده چون همون راه نادرست مشكلش رو حل ميكنه.

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





دوست عزيز بهتره قبل از گفتن حرفي خوب بهش فكر كنيد نه اينكه با هر لحني كه دلتون خواست با بقيه برخورد كنيد!!!!!!!!! اينجا خيلي ها از شما پايينترند و خيلي ها بالاتر ولي دليل نميشه آدم به اونايي كه سطحشون پايينه برخورد توهين آميز داشته باشه!!!
اگه حرفامو قبول ندارين يه نگاهي به پست هاتون بندازين ببينين تو چندتاش برخورد محترمانه اي با اعضاي تالار داشتين!

برخورد محترمانه؟ لحن؟
مگر نوشتن لحن هم دارد؟ مگر به کسی بی‌احترامی کردم؟
اینکه میگم یک کاری درست نیست یعنی اینکه کار درست نیست. به اینکه کی دارد انجام میده ربط ندارد، کار اشتباه اشتباه است. حالا میشه اشتباه بودنش را با عسل و حلوا گفت یا یکضرب.
کسی که حرفه‌ای است با بادی نیست که با بیدهایی مانند اینکه من چی میگم بلرزند.
و اینکه میگم یک چیزی درست نیست ربطی به استفاده کنندش ندارد، برایه آگاهی دیگران است که از راه اشتباه تبلیغ نشه.



ديگه صحبتي ندارم. فقط چون ديدم دوستمون هرجور عشقش ميكشه با بقيه حرف ميزنه مجبور شدم برخورد كنم. بعضي ها تا بهشون نگي آقا يا خانم فلاني رفتارت پسنديده نيست متوجه نميشن.
از مديران بخش هم عذرخواهي ميكنم اگه كمي با لحن تند حرف زدم.

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

به نظر من با لحن تند حرف نزدید، بلکه بر اساس پیشفرضهایه اشتباه اساس حرفتان را گذاشتید.
فرق بین من و شما این هست که اگر ما هر دو دکتر بودیم و میدیدیم که یکی گلوله خورده، باهاش ۲، ۳ دقیقه احوال پرسی میکردید، بعدش هم با ملایمت ازش درخواست میکردید که با اجازه‌شان لباسش را ببرید و با با اجازه‌شان گلوله را دربیارید، منتها من تا قبل از اینکه احوال پرسی شما تمام بشه گلوله را در آورده بودم و داشتم باندمانش هم را انجام میدادم و رفته بودم سراغ مجروح بعدی.
به جایه اینکه به من درس تعارف و ادب بدید، به من یکمی ایرادهایه حرفه‌ای بگیرید که من هم یک چیزی یاد بگیرم.

متشکر از پستتان، ولی از لحاض اینکه قابلیت کمک کردنم را به دیگران بیشتر کند هیچ اثری ندارد.

اَرژنگ
چهارشنبه 04 شهریور 1388, 12:34 عصر
دوست عزیز اگه مرد عمل هستی بیا جلو و یه نمونه کد بزار اینجا و یه راه حل ارائه کن. اگه نیستی ملت رو سر کار نزار و بیخودی پست درپیت نده.(جناب اَرژنگ).:عصبانی:

بهتره اون آواتارت رو هم عوض کنی چون اصلا با روحیاتت جور نیست.:قهقهه:

آقای sd.CSharpProgrammer از شما تشکر میکنم.:لبخندساده:
اگر بفرمائید که بکدام جوابم ، جواب درپیتی میگید، و دلیل در پیت بودنش را هم ارض بفرمائید، هم من یک چیزی یاد میگیرم و هم شاید بتوانم یک جواب بهتر خدمتتان اراعه بدم.

در ضمن بارها کد فرستادم، ولی کسی نه میگرده و نه راه درست را ارئه میده. فقط از اینکه میبینم راه‌هایه من درآوردی را هر کی از راه میرسه به عنوان برنامه‌نویسی ارائه میده خستم کرده.
با تشکر از ایده‌تان در مورد آواترم، ولی اگر دقیقا میگفتید که مشکلی که براش میخواهید براش کد بفرستم چی هست بیشتر فایده‌دار بود.

در ضمن خودتان گفتید که از روشش خوشتان نمیاد، من هم گفتم که یک مثال کوچک بفرستید درستش کنم، اینکه شما حتی برایه حل مسعله خودتان حاضر نیست کاری انجام بدید تقصیر من است؟

SMRAH1
چهارشنبه 04 شهریور 1388, 12:53 عصر
سلام

1) هر چند لحن استاد گرامی جناب «آرژنگ» کمی تند است ولی بی ادبانه یا .. نیست!به هر حال باید یاد بگیریم که آدمها با هم متفاوتند.
2) من هم سئوال مطرح شده در پست 1 تست کردم.ولی چیزی مشکوکی ندیدم (متد Public فرم پدر را در فرم فرزند فراخوانی کردم و شد!).حالا نوبت شما است که نمونه کد بگذارید که نمیشه!شاید من سئوال رو اشتباه فهمیدم یا شما یک جای راه رو درست انجام نمی دهید! (به همان پیشنهاد جناب آرژنگ برای گذاشتن کد رسیدیم!).

موفق باشید

Open-Source
چهارشنبه 04 شهریور 1388, 14:18 عصر
اگر بفرمائید که بکدام جوابم ، جواب درپیتی میگید، و دلیل در پیت بودنش را هم ارض بفرمائید، هم من یک چیزی یاد میگیرم و هم شاید بتوانم یک جواب بهتر خدمتتان اراعه بدم.

در ضمن بارها کد فرستادم، ولی کسی نه میگرده و نه راه درست را ارئه میده. فقط از اینکه میبینم راه‌هایه من درآوردی را هر کی از راه میرسه به عنوان برنامه‌نویسی ارائه میده خستم کرده.
با تشکر از ایده‌تان در مورد آواترم، ولی اگر دقیقا میگفتید که مشکلی که براش میخواهید براش کد بفرستم چی هست بیشتر فایده‌دار بود.

در ضمن خودتان گفتید که از روشش خوشتان نمیاد، من هم گفتم که یک مثال کوچک بفرستید درستش کنم، اینکه شما حتی برایه حل مسعله خودتان حاضر نیست کاری انجام بدید تقصیر من است؟


کاری به فرم پدر و فرزند نداریم فقط:

فرم دوم را بصورت ShowDialog باز کردم.
فقط میخوام اون متغییر از فرم اول رو تغییر بدید.


در ضمن:

من معذرت میخوام.

جَو گیر شدم.

شما استاد ما هستی.

ماه رمضان هستش پس بهتره...

اَرژنگ
چهارشنبه 04 شهریور 1388, 14:46 عصر
کاری به فرم پدر و فرزند نداریم فقط:

فرم دوم را بصورت ShowDialog باز کردم.
فقط میخوام اون متغییر از فرم اول رو تغییر بدید.

حالا مشکلتان را درک میکنم،
میوانید چند بار دکمه را کلیک کنید و بعدش فرم ۲ را ببندید.
به تیتر فرم ۱ بعد از زدن دکمه در فرم ۱ توجه کنید.

برایه اینکار روش بهتری وجود دارد که قبلا فرستاده بودم. سعی میکنم یا پستم را پیدا کنم یا اینکه دوباره سرهمش کنم. ولی این فعلا شاید کارتان را راه بندازه، ولی من به عنوان مثال خوب نمیبینمش، باید مثال بهتر بفرستم یا پیدا کنم.

در ضمن من استاد کسی نیسیتم مخلص همه هستم.

اَرژنگ
چهارشنبه 04 شهریور 1388, 14:53 عصر
به نام خدا ::

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

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

در ضمن ، بحث و جدل برایه یاد گرفتن خیلی خوب است، من بهترین چیزهایی که یاد گرفتم با تماشایه بحث و جدل دیگران بود، چونکه هر کدام به نقته‌ای که باور داشت برایه اثباتش تلاش میکرد، ما باید بحث و جدل بیشتر داشته باشیم تا کمتر به جایه اینکه مانند گوسفند سرمان را بندازیم پائین و همه چی را قبول کنیم.

اَرژنگ
چهارشنبه 04 شهریور 1388, 14:54 عصر
ببینید این پست هم به کارتان میاد؟

http://barnamenevis.org/forum/showthread.php?t=125993

SMRAH1
چهارشنبه 04 شهریور 1388, 15:00 عصر
سلام

اشکال از خط :

private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.i += 5;
}است.در این خط در واقع شما یک فرم دیگه ساختید (متغیر f به همون فرمی که شما داشتید اشاره نمی کنه!)در واقع باید کد رو اینطوری می نوشتید:

private void button1_Click(object sender, EventArgs e)
{
Form1 f = (Form1)Application.OpenForms["Form1"];
f.i += 5;
}البته این روش هم اصولی نیست (ولی کار می کنه!).با این حال من روش زیر رو ترجیم می دهم (اصولی تر است) :

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

public int i = 0;

private void button1_Click(object sender, EventArgs e)
{
i = 15;

MessageBox.Show(i.ToString());

Form2 f = new Form2();
f.ShowDialog(this);

MessageBox.Show(i.ToString());
}
}
public partial class Form2 : Form
{
private Form1 form1 = null;
public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
if (form1 != null)
{
form1.i += 5;
}
}

public void ShowDialog(Form1 f)
{
form1 = f;
ShowDialog();
}
}
البته اگر الزامی به داشتن Form1 در Form2 دارید بهتره اون رو به جای ShowDialog از طریق سازنده کلاس Form2 به Form2 بفرستید.

موفق باشید

Open-Source
چهارشنبه 04 شهریور 1388, 15:42 عصر
از دوستان تشکر میکنم.
کارم راه افتاد(با اینکه 100 درصد به دلم ننشست :متفکر: ولی از روش خودم بهتر بود).

یه بار دیگه از دوستان به خاطر ...... عذرخواهی میکنم.:لبخندساده:

اَرژنگ
چهارشنبه 04 شهریور 1388, 17:35 عصر
از دوستان تشکر میکنم.
کارم راه افتاد(با اینکه 100 درصد به دلم ننشست :متفکر: ولی از روش خودم بهتر بود).



اگر چیزی به دلتان نمیشه شاید دلیلش این است که کاملا جواب نیازها نیست و یا اینکه یک جایه کار را خراب میکند.
این روشی که فرستادم تکنیک نرمال این است که یک دیالوگ نشان بدیم و واردات را به فرم قبلی که دیالوگ را نشان میده برگردانیم. ولی میتوانیم برایه کاری که شما در نظر دارید اختصاصیترش کنیم.

amir-haghighi
پنج شنبه 05 شهریور 1388, 13:24 عصر
با سلام .

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

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

در فرم اصلی هم یک تب پیج هست که یوزر کنترل رو به خودش اظافه میکنه . حالا وقتی تابعی که در یوزر کنترل وجود داره و کارش انتخاب همه متن هست رو صدا میزنم هیچ اتفاقی نمی افته !

SMRAH1
پنج شنبه 05 شهریور 1388, 15:37 عصر
سلام

همون مشکلی که در پست 19 نوشتم رو در اینجا نیز برقرار است.کد شما باید به شکل زیر باشه تا درست کار کنه (کد نوشته شده توسط شما کاملا غلط است!):

private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)
{
//UserControl1 user = new UserControl1();
UserControl1 user = (UserControl1)tabControl1.TabPages[0].Controls[0];
user.Select_All();
}

در ضمن بهتر است در هنگام نامگذاری کنترل های،دقت کنید تا برای یافتن کنترل مورد نظر مشکلی نداشته باشید (در اینجا من از ایندکس استفاده کردم و اگر تعداد tab ها و کنترل آنها زیاد باشد،باید توسط نام و ... آن ها را پیدا کنید).

موفق باشید

Mahdi.Kiani
پنج شنبه 05 شهریور 1388, 21:32 عصر
سلام
دوستان تو روخدا به من مدیر هم رحم کنید.اینقدر پست های حاشیه ای نفرستید.آخه من و امثال من که گناه نکردیم که مدیر شدیم. برای بسیاری از سوالات تکراری می بایستی کل تاپیک را که بسیاری از اون پست ها هم حاشیه ای و فاقد محتوای علمی هستند را مرور کنم. سپس تصمیم بگیرم که برخی از پست ها را حذف / ویرایش کنم.بعد از اون جواب کاربران که شاکی هستند از اینکه پست هایشان پاک شده است را بدهم و گاها ناسزاها و فحش هایی را هم که در پی ام لطف می کنند و برای بنده می فرستند را مطالعه کنم!
بد تر از آن مواجه شدن با صحبت های برخی افراد( به ظاهر انسان دوست که ادعا می کنند با مردم باید مهربان بود و همه انسان هستند و .. ولی در عمل خودشان .... ) می باشد.
و بدتر از همه این ها اینکه خودم هم مجبور می شوم علی رغم میل باطنی ام پستی با مضمون تذکر بدم که خود پستی فاقد محتوای علمی است.
در ضمینه موضوع این تاپیک بارها بحث شده و روش های محتلفی ارائه شده.به آن ها رجوع کنید.
موفق باشید

amir-haghighi
یک شنبه 08 شهریور 1388, 18:04 عصر
با سلام ...

این کد دقیقا چه کاری انجام میده ؟

UserControl1 user = (UserControl1)tabControl1.TabPages[0].Controls[0];

SMRAH1
یک شنبه 08 شهریور 1388, 19:47 عصر
سلام

اولین کنترل (Controls[0]) ، از اولین تب (TabPages[0]) از کنترل tabControl1 را بر می گردونه.

amir-haghighi
یک شنبه 15 شهریور 1388, 11:40 صبح
به یاد او ::

با تشکر از دوستان . من مشکلم حل شد . اما حالا با یه مشکل جالبتر روبرو شدم . البته میدونم که این مشکلم با مشکل قبلی فرق چندانی نداره اما من نتونستم حلش کنم .

خوب من الان یه فرم به برنامه خودم اظافه کردم . حالا در اون فرم یک دکمه دارم که وقتی کلیک میشه میخوام در تب فعلی همه متن کنترل ریچ تکست باکس انتخاب بشه . همون طور که میدونید این کنترل ریچ تکست باکس به صورت یک DLL هستش و در فرم اصلی برنامه (فرم والد) قرار داره . حالا من میخوام از داخل یه فرم فرزند دوباره همون متد Select_All() رو اجرا کنم .

amir-haghighi
یک شنبه 15 شهریور 1388, 20:32 عصر
یعنی میشه این کار رو انجام داد ؟

اَرژنگ
دوشنبه 16 شهریور 1388, 19:56 عصر
یعنی میشه این کار رو انجام داد ؟

مشکلتان چیه؟ من نمیبینم کجاش گیر دارید.

SMRAH1
سه شنبه 17 شهریور 1388, 04:21 صبح
سلام

همانطور که قبلا نوشتم،با کد :

tabControl1.TabPages[0].Controls[0]
می تونید کنترل اول از تب اول tabControl1 رو دسترسی داشته باشید.حالا اگر بخواهید تمام کنترل ها رو بدست بیارید باید روی TabPages و در هر TabPage روی COntrols اون،شمارش کنید تا تمام کنترل ها رو بشمارید.

اما این حرف ها چه ربطی به سئوال شما داره.اگر شما بدونید که کنترل مورد نظر (که می خواهید عملیاتی روش انجام بدید، مثلا همان SelectAll را فراخوانی کردن) دارای چه ویژگی منحصر به فردی است،می تونید به وسیله همون ویژگی،کنترل رو بدست بیارید.مثلا می دونید اسمش هست AAA ،در این صورت باید تمام کنترل ها رو بشمارید تا به کنترلی برسید که اسمش AAA است و بعد عملیات مورد نظر رو انجام بدید.در ضمن تبدیل نوع (از کلاس Control به کلاس کنترل مورد نظر)فراموش نشود (مانند پست 19).

موفق باشید

amir-haghighi
سه شنبه 17 شهریور 1388, 12:11 عصر
با سلام .

خوب من در فرم اصلی خودم به راحتی میتونم متد رو فراخونی کنم و جواب بگیرم . حالا فرض کنید که میخوام همون متد رو از داخل یه فرم فرزند فراخوانی کنم !

یعنی در فرم اصلی یوزر کنترل در داخل تب پیج قرار داره و من میخوام متد Select_All() رو از داخل فرم دوم که فرزند فرم اصلی هست فراخونی کنم . یه فایل نمونه مجدآ قرار دادم تا منظورم رو روشنتر بیان کنم .

amir-haghighi
سه شنبه 17 شهریور 1388, 18:21 عصر
مشکلتان چیه؟ من نمیبینم کجاش گیر دارید.

خوب من مشکلم رو در تاپیک قبلی خودم اعلام کردم . میخوام که از فرم فرزند متد مورد نظر که مربوط به یک یوزر کنترل هست و در فرم اصلی قرار داره رو صدا کنم .

SMRAH1
چهارشنبه 18 شهریور 1388, 01:55 صبح
سلام

1) تابع زیر رو به Form1 اضافه کن:

internal void Select_All()
{
UserControl1 user = (UserControl1)tabControl1.SelectedTab.Controls[0];
user.Select_All();
user.Focus();
}

2) در رویداد button1_Click در Form2 داریم:

private void button1_Click(object sender, EventArgs e)
{
Form1 f = (Form1)this.MdiParent;
f.Select_All();
}

موفق باشید

amir-haghighi
پنج شنبه 19 شهریور 1388, 10:57 صبح
سلام

1) تابع زیر رو به Form1 اضافه کن:

internal void Select_All()
{
UserControl1 user = (UserControl1)tabControl1.SelectedTab.Controls[0];
user.Select_All();
user.Focus();
}

2) در رویداد button1_Click در Form2 داریم:

private void button1_Click(object sender, EventArgs e)
{
Form1 f = (Form1)this.MdiParent;
f.Select_All();
}

موفق باشید

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


من در فرم اصلی خودم یک پنل قرار دادم و فرم دوم رو به فرم اصلی خودم اظافه میکنم اما برای اینکه در فرم اصلی خودم فرم دوم روی پنل قرار بگیره ، فرم دومم رو به عنوان یک کنترل به پنل اظافه میکنم .




panel.controls.add(form2);


حالا وقتی در فرم دوم به کد زیر میرسه ارور میده (به خط دوم گیر میده)! :




Form1 f = (Form1)this.MdiParent;
f.Select_All();


اروری هم که میده تقریبا تو همین مایه هاست :

No object refrence set .... :گیج: :لبخند:


خوب من چی کار باید بکنم که این مشکل برطرف بشه ؟

cazino86
جمعه 20 شهریور 1388, 19:22 عصر
منم همين مشكل رو دارم . راهي براي حل اين مشكل وجود داره در C# يا اينكه نميشه كاريش كرد ؟

SMRAH1
شنبه 21 شهریور 1388, 01:37 صبح
سلام

راه حل بالا ،با این فرض است که فرم اول به شکل MDI بوده و فرم دوم به عنوان فرزند آن مطرح می شود.اما در سئوال جدید،رابطه بین رفم 1 و فروم 2 تغییر کرده است.بهترین راه حل به شکل زیر است:
1) درفرم2 متغیری از جنس فرم 1 معرفی کنید.
2) در هنگام ساختن فرم دوم (در فرم اول9)،متغیر فوق را به فرم اول نسبت دهید
3) در مکان مورد نظر در فرم 2،با توجه به اینکه متغیر فرم اول را دارید،تابع مناسب را فراخوانی کنید

موفق باشید

amir-haghighi
شنبه 21 شهریور 1388, 17:28 عصر
سلام

راه حل بالا ،با این فرض است که فرم اول به شکل MDI بوده و فرم دوم به عنوان فرزند آن مطرح می شود.اما در سئوال جدید،رابطه بین رفم 1 و فروم 2 تغییر کرده است.بهترین راه حل به شکل زیر است:
1) درفرم2 متغیری از جنس فرم 1 معرفی کنید.
2) در هنگام ساختن فرم دوم (در فرم اول9)،متغیر فوق را به فرم اول نسبت دهید
3) در مکان مورد نظر در فرم 2،با توجه به اینکه متغیر فرم اول را دارید،تابع مناسب را فراخوانی کنید

موفق باشید

با سلام . من به صورت زیر عمل کردم :



Form2 fm = new Form2();
fm.mdiparrent = fm.f;
fm.f = new form1();
panel1.controls.add(fm);
fm.show();
fm.bringtofront();

در فرم دو هم متغیر زیر رو به صورت پابلیک تعریف کردم ::



Form1 f = new form1();


خوب حالا وقتی متد رو اجرا میکنم هیچ خروجی نمیگیرم !

میشه بگید این بار دیگه کجای کارم اشتباهه؟ :لبخند:

اصلا تبدیل نوع رو به درستی انجام دادم یا نه ؟

دیگه واقعآ از این موضوع خسته و کلافه شدم . :عصبانی++:

SMRAH1
یک شنبه 22 شهریور 1388, 13:45 عصر
سلام

خوب نباید خروجی بگیری:بامزه:!در واقع شما در خط زیر:

fm.f = new form1();
یک فرم 1 جدید تولید کردید (که هیچ ربطی به فرم جاری نداره).با این اوصاف می خواهید که عملیات در فرم جاری انجام بشه.:لبخند:
باید خط رو به شکل زیر تغییر بدی (فرض من اینکه که کد بالا در فرم 1 اجرا میشه):

fm.f = this;

موفق باشی

cazino86
چهارشنبه 06 آبان 1388, 11:13 صبح
سلام

خوب من هم مثل همین مشکل رو دارم با این تفاوت که میخوام از داخل یوزر کنترل ، خصوصیات یک کنترل که در فرم اصلی قرار داره رو تغییر بدم . چی کار باید بکنم . از روش های بالا استفاده کردم اما جواب نگرفتم .

اَرژنگ
شنبه 09 آبان 1388, 11:48 صبح
سلام

1) هر چند لحن استاد گرامی جناب «آرژنگ» کمی تند است ولی بی ادبانه یا .. نیست!به هر حال باید یاد بگیریم که آدمها با هم متفاوتند.
2) من هم سئوال مطرح شده در پست 1 تست کردم.ولی چیزی مشکوکی ندیدم (متد Public فرم پدر را در فرم فرزند فراخوانی کردم و شد!).حالا نوبت شما است که نمونه کد بگذارید که نمیشه!شاید من سئوال رو اشتباه فهمیدم یا شما یک جای راه رو درست انجام نمی دهید! (به همان پیشنهاد جناب آرژنگ برای گذاشتن کد رسیدیم!).

موفق باشید
با تشکر از شما که ما را لایق لقب استاد میدانید.
در مورد تند بودن زبان: زبان اصلی من فارسی نیست، تا زمانی که در این فروم فارسی بنویسم حداقل ۲۵ سالی میشد که فارسی ننوشته بودم.
در امضام تقاضا کرِده بودم که اگر لحن جوری نیست که خوششان بیاد بگن عوض کنم، به جایه اینکه به اطلاعات اهمیت داده بشه مثل اینکه در فارسی همه چی به جز اطلاعات مهمتره.
حداقل ۱۳ سال دقیقا همین جوری که در فارسی جواب میدم را در فروم انگلیسی به زبان انگلیسی فرستادم و هیچ وقت کسی نه در مورد لحن و یا تند بودن انتقاد کرد.
من نمیدونم به چه ساز مردوم برقصم، اشکالت را بگیم آدم بده میشیم، هنوز هم دلیل اینکه همان جوابی که در انگلیسی باعث تشکر میشه ولی در فارسی مردوم را ناراحت میکنه را (من) نمیفهمم.
اگر کسی الگویه اینکه چجوری در فارسی جواب داده میشه را داره بهم بفرسته متشکر میشم.

parrisa
شنبه 09 آبان 1388, 12:54 عصر
خيلي با حال بود :قهقهه:

Ali_M_K
دوشنبه 11 آبان 1388, 19:21 عصر
دوستان خوبم

با اينكه اين تاپيك خيلي طولاني شده اما لازم ميدونم يه نكته روبگم...

آقايون و خانومهاي برنامه نويس (( اونهم در .net )) لطف كنيد صفحه اول به مطلبي كه naeeme پست كرده توجه كنيد...
به اصول .net پايبند شيد و وسط كدهاي برنامه تون به زبان #c لطيفه ننويسيد.

ببخشيد --- خداحافظ