PDA

View Full Version : تابع که بتواند لیبل و تکت باکس . ... دریافت کند



hamidsq
شنبه 26 آذر 1390, 11:29 صبح
چگونه باید تابعی تعریف کرد که بتواند lable text box .... دریافت کند. و اعمالی را در ان اجرا کند.

zare69
شنبه 26 آذر 1390, 11:44 صبح
میتونید بیشتر توضیح بدید اصلا سوالتون واضح نیست.:چشمک:

ma.rad
شنبه 26 آذر 1390, 11:47 صبح
دقیقا میخوای چه کاری انجام بدی؟

az.heidarzadeh
شنبه 26 آذر 1390, 11:47 صبح
سلام
کاری نداره که، شما میتونید توی ورودی به تابع هرچیزی که میخواید بدید که این شامل انواع کنترل های ویندوز هم میشه


private void Function(TextBox txt, Label lbl)
{
...
}

حالا هر عملیاتی که میخواید روش انجام بدید...

Mahmoud Zaad
شنبه 26 آذر 1390, 11:57 صبح
بستگی داره چه تابعی می خوای.
یه مثال خیلی ساده:
فرض کن یه دکمه داریم که وقتی روش کلیک می کنی یه مسیج باکس میاد و می نویسه hello world. خب می نویسیم: MessageBox.Show("hello world");
خب حالا می خوایم hello world رو از تکست باکس یا لیبل بگیریم.مثلا اسم تکست باکس اینه: textbox1. خب می نویسیم MessangeBox.Show(textbox1.Text);
اما می خوایم همین کارا رو با تابع بکینم. تابع رو به صورت زیر می نویسیم:
private void sayHello(string myWord)
{
MessageBox.Show(myWord);
}
حالا برای فراخوانیش توی رویداد کلیک دکمه خیلی راحت می نویسیم:
sayHello(textbox1.Text);

secondstriker
شنبه 26 آذر 1390, 13:55 عصر
اين !كه خيلي واضحه!:لبخندساده:
هر تابعي كه وروديش از نوع رشته باشه مي تونه label.Text دريافت كنه

hamidsq
چهارشنبه 30 آذر 1390, 15:53 عصر
مشکل اینجاست میخوام بدونم اگه با ارجاع label رو به تابع بدم وقتی اون رشته تغییر کنه اون لیبل هم تغییر میکنه؟

az.heidarzadeh
چهارشنبه 30 آذر 1390, 17:14 عصر
خب آره دیگه اگه اونطور که بهت گفتم lable رو به تابع بفرستی و مقدار دهی کنی دقیقا تغییرات اعمال میشه امتحان کردنش خیلی ساده استف من همیشه از اینجور کارا میکنم... :چشمک:

gwbasic
چهارشنبه 30 آذر 1390, 17:43 عصر
چگونه باید تابعی تعریف کرد که بتواند lable text box .... دریافت کند. و اعمالی را در ان اجرا کند.
جوابتون رو که دوستان دادن اما من پیشنهاد می کنم اول بگین که چه چیزی رو می خواین پیاده سازی کنین شاید راه بهتری برای اون باشه که قطعا هست!!!

خب آره دیگه اگه اونطور که بهت گفتم lable رو به تابع بفرستی و مقدار دهی کنی دقیقا تغییرات اعمال میشه امتحان کردنش خیلی ساده است من همیشه از اینجور کارا میکنم... :چشمک:
امیدوارم دیگه ازین روش استفاده نکنید. :چشمک:
ما هر وقت که می خوایم کد بنویسیم باید به این فکر کنیم کدمون چقدر قالبیت نگهداری رو داره؟ در آینده اگر مشکلی پیش اومد آیا راحت می تونیم اونو پیدا کنیم یا نه چقدر کدهامون به هم وابسته هستند برای تغییرات احتمالی چقدر باید کدنویسی کنیم آیا برای یک تغییر کوچک باید همه جا رو بهم بریزیم یا نه. هر چیزی سرجای خودش هست یا نه؟
حالا با این تفاسیر فکر می کنید ما باید TextBoxمون رو رو کولمون بذاریم ازین کلاس به اون کلاس ازین متد به اون متد تحویل بدیم تا هر جوری خواستن تغییرش بدن!!! فرض کنید جایی از برنامه دید که مقدار این textbox غلط نمایش داده می شه چند جا رو باید بررسی کنید برای رفع مشکل و یا اینکه اصلا Bussiness تغییر کرده این تغییرات چند جا باید اعمال بشه!!!

خیلی از دوستان رو می بینم که هنوز به لحاظ فنی پیشرفت زیادی نکردن ولی می خوان چند لایه برنامه نویسی کنن. این تصور رو می کنن که چند لایه نویسی یعنی چند تا پروژه داخل یک Solution تعریف کنن و به هم Add Reference کنن غافل از اینکه این ارتباط به چه صورتی هست و منطق اون به چه شکلی هست. این منطق جداسازی از همه چیز مهمتر هست که این وسط گم می شه.

majidrezaei2007
پنج شنبه 01 دی 1390, 01:00 صبح
نه همینطوری کار نمی کنه ، چون حالت پیش فرض ارسال به توابع call by value هست ، یعنی یک کپی از کلاس لیبل میره به تابع و تغیرات رو اون اعمال میشه
اگه میخوای تغیرات رو لیبل اصلیت اعمال بشه باید توی تابع پشت آرگومان ها کلمه کلیدی ref بزاری تا آدرس لیبل اصلیت بیاد تو برنامه . موقع فراخوانی هم کلمه ref رو پشت آرگومان هایی که توی تابع اصلی ref هستند میزاری
بعد حله

gwbasic
پنج شنبه 01 دی 1390, 01:14 صبح
نه همینطوری کار نمی کنه ، چون حالت پیش فرض ارسال به توابع call by value هست ، یعنی یک کپی از کلاس لیبل میره به تابع و تغیرات رو اون اعمال میشه
اگه میخوای تغیرات رو لیبل اصلیت اعمال بشه باید توی تابع پشت آرگومان ها کلمه کلیدی ref بزاری تا آدرس لیبل اصلیت بیاد تو برنامه . موقع فراخوانی هم کلمه ref رو پشت آرگومان هایی که توی تابع اصلی ref هستند میزاری
بعد حله
کلاسها Reference Type‌هستن و Control‌ها هم کلاس هستند بنابراین نیازی به ref نیست

az.heidarzadeh
پنج شنبه 01 دی 1390, 11:48 صبح
جوابتون رو که دوستان دادن اما من پیشنهاد می کنم اول بگین که چه چیزی رو می خواین پیاده سازی کنین شاید راه بهتری برای اون باشه که قطعا هست!!!

امیدوارم دیگه ازین روش استفاده نکنید. :چشمک:
ما هر وقت که می خوایم کد بنویسیم باید به این فکر کنیم کدمون چقدر قالبیت نگهداری رو داره؟ در آینده اگر مشکلی پیش اومد آیا راحت می تونیم اونو پیدا کنیم یا نه چقدر کدهامون به هم وابسته هستند برای تغییرات احتمالی چقدر باید کدنویسی کنیم آیا برای یک تغییر کوچک باید همه جا رو بهم بریزیم یا نه. هر چیزی سرجای خودش هست یا نه؟
حالا با این تفاسیر فکر می کنید ما باید TextBoxمون رو رو کولمون بذاریم ازین کلاس به اون کلاس ازین متد به اون متد تحویل بدیم تا هر جوری خواستن تغییرش بدن!!! فرض کنید جایی از برنامه دید که مقدار این textbox غلط نمایش داده می شه چند جا رو باید بررسی کنید برای رفع مشکل و یا اینکه اصلا Bussiness تغییر کرده این تغییرات چند جا باید اعمال بشه!!!

خیلی از دوستان رو می بینم که هنوز به لحاظ فنی پیشرفت زیادی نکردن ولی می خوان چند لایه برنامه نویسی کنن. این تصور رو می کنن که چند لایه نویسی یعنی چند تا پروژه داخل یک Solution تعریف کنن و به هم Add Reference کنن غافل از اینکه این ارتباط به چه صورتی هست و منطق اون به چه شکلی هست. این منطق جداسازی از همه چیز مهمتر هست که این وسط گم می شه.
ممنون از راهنمایی هاتون، اما خب واقعا اینجوری نیست که textbox مو اینور اونور بفرستم :لبخند: اونکه مثال بود اما گاهی اوقات برای اینکه کدامو کم کنم از این کارا میکنم مثلا توی همین پروژه آخری برای اینکه فرم رو خالی کنم panel ام رو میفرستادم تو کلاس یه تابع داشتم که textbox های توش رو خالی کنه، یکی داشتم که visible کنه یکی enable کنه باز برعکس هر کدومشون :چشمک: اینجور کارا رو پس چطور انجام بدم تازه ایجاد تغییر هم که خیلی راحته بعدشم کلی کدام کم میشه...

gwbasic
پنج شنبه 01 دی 1390, 13:23 عصر
ممنون از راهنمایی هاتون، اما خب واقعا اینجوری نیست که textbox مو اینور اونور بفرستم :لبخند: اونکه مثال بود اما گاهی اوقات برای اینکه کدامو کم کنم از این کارا میکنم مثلا توی همین پروژه آخری برای اینکه فرم رو خالی کنم panel ام رو میفرستادم تو کلاس یه تابع داشتم که textbox های توش رو خالی کنه، یکی داشتم که visible کنه یکی enable کنه باز برعکس هر کدومشون :چشمک: اینجور کارا رو پس چطور انجام بدم تازه ایجاد تغییر هم که خیلی راحته بعدشم کلی کدام کم میشه...

اگر آموزش منو در مورد پروژه ثبت سفارشات دنبال کرده باشین و یا اینکه با مفهوم DataBinding آشنایی داشته باشین. متوجه می شین که نیازی به این کار نیست! ما چه موقعی داده های فرم رو خالی می کنیم معمولا وقتی که داده های جدیدی بخواهیم وارد کنیم. حالا وقتی کنترلهای فرم ما به موجودیتی Bind‌باشن و ما از اون موجودیت یک شی جدید بسازیم چون کنترلهای فرم با داده ها هماهنگ هستند در همون لحظه کنترلهای فرم نیز خالی می شوند.
البته موردی که شما گفتین (خالی کردن مخفی کردن جارو کردن ناز کردن کنترل های فرم :لبخند::چشمک:) یکسری متدهای Helper هستند که می تونه کمک کنه و قابل استفاده هست.
این مواردی رو که من اشاره می کنم حالتی خودشو نشون می ده که یک Bussiness ای رو چند فرم همزمان با هم باید انجام بده و در نهایت در یک Transaction قرار که در database‌ثبت بشه اونموقع هست که باید خیلی سخت گیرانه به روابط بین اشیاء پروژمون فکر کنیم. هرچند که یک برنامه نویس حرفه ای اگه بخواد یک خط کد بنویسه بطور اتوماتیک همه این موارد رو در نظر می گیره...

25farshid
پنج شنبه 01 دی 1390, 15:42 عصر
سلام
این یه نمونه کد :
مثلا اگه بخایی enable چند تا کنترل رو false یا true کنی.
public void ChangeEnable(bool val, params Control[] ctrlArrray)
{
foreach (Control ctrl in ctrlArrray)
ctrl.Enabled = val;
}

KHorami_yahya
پنج شنبه 01 دی 1390, 17:49 عصر
چگونه باید تابعی تعریف کرد که بتواند lable text box .... دریافت کند. و اعمالی را در ان اجرا کند.
سلام دوست عزیز شما میتونی یک شی از نوع object تعریف کنی و هر نو شی ای رو به تابع ارسال کنی.ولی کار درستی نیست چون تو به هر مشخصه از شی دستری داری و هر کدومو که بخوای میتونی ارسال کنی(و تو تابع هم بعنوان پارامتر دریافت کنی) مثلا من تابعی درست کردم که لیبل رو به تابع ارسال میکنم
public string getlabel(object obj_label)
{
messagebox.show(((label)obj_label).text)}

hamidsq
شنبه 03 دی 1390, 00:45 صبح
اصلا نمیشه لیبل رو به عنوان ارگومان به تابع داد. از چه کتابخونه ای استفاده بکنم؟

hamidsq
شنبه 03 دی 1390, 00:55 صبح
سلام دوست عزیز شما میتونی یک شی از نوع object تعریف کنی و هر نو شی ای رو به تابع ارسال کنی.ولی کار درستی نیست چون تو به هر مشخصه از شی دستری داری و هر کدومو که بخوای میتونی ارسال کنی(و تو تابع هم بعنوان پارامتر دریافت کنی) مثلا من تابعی درست کردم که لیبل رو به تابع ارسال میکنم
public string getlabel(object obj_label)
{
messagebox.show(((label)obj_label).text)}

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

hamidsq
شنبه 03 دی 1390, 01:06 صبح
using System.Windows.Forms;
این رو توی کلاس معرفی نمیکردم. از همه دوستان ممنون. لطف کردین.