جلسه دوازدهم

OOP Example Part 2


Task : Write an Example for Helper Methods 

نظرات 8 + ارسال نظر
یلدا یکشنبه 28 خرداد 1391 ساعت 06:32 ب.ظ

سلام
من وقتی میخوام کدهای برنامه( که انگلیسی نوشته ام) را اینجا کپی کنم (برای کامنت گذاشتن)همه اشان قاطی می شوند ، کسی میتونه به من بگه چیکار کنم تا اینجوری نشه؟
ممنون

اشکالی نداره همین طوری بذار
میشه همشو ۲باره کپی کرد تو Word و درستشون کرد

یلدا دوشنبه 29 خرداد 1391 ساعت 12:31 ق.ظ

با سلام
جواب سوال:
برای پاک کردن آیتم های فرم با استفاده از foreach میتوانیم یک آرایه از نوع آن آیتم تعریف کنیم و سپس از دستورforeach با استفاده از آن ارایه استفاده کنیم، بعد از این برای پاک کردن هر مورد فقط کافی است که نام آن آیتم را به اعضای آرایه اضافه کنیم.
مانند مثالهای زیر:

// foreachبا استفاده از textbox برای پاک کردن
System.Windows.Forms.TextBox[] nameTextBox = new System.Windows.Forms.TextBox[] { txtFamily, txtName, txtphon };


foreach (System.Windows.Forms.TextBox s in nameTextBox)
{
s.Text = string.Empty;
}




// comboboxs برای پاک کردن

System.Windows.Forms.ComboBox[] nameComboBox = new System.Windows.Forms.ComboBox[] { cmbmonth, cmbYear,cmbCountry };

foreach (System.Windows.Forms.ComboBox s in nameComboBox)
{
s.Text = string.Empty;
}




//lables برای پاک کردن

System.Windows.Forms.Label[] nameLable = new System.Windows.Forms.Label[] { lblResult};

foreach (System.Windows.Forms.Label s in nameLable)
{
s.Text = string.Empty;
}




// Rediobottens برای پاک کردن

System.Windows.Forms.RadioButton[] nameRadioButton = new System.Windows.Forms.RadioButton[] { rdiFmale,rdiMale };

foreach (System.Windows.Forms.RadioButton s in nameRadioButton)
{
s.Checked = false;
}





// CheckBoxe برای پاک کردن
System.Windows.Forms.CheckBox[] nameCheckBoxe = new System.Windows.Forms.CheckBox[] { chkacception };

foreach (System.Windows.Forms.CheckBox s in nameCheckBoxe)
{
s.Checked = false;
}


یه سوال:
آیا کدی هست که بتونه همه این موارد را فقط با یک دستور foreach انجام بده؟؟؟

از اینکه وقت میگذارید برا جواب دادن و اینکه زود جواب میدن ممنون

یلدا به قول معروف Nice Try

اما همون طور که خودت گفتی بله راهی هست !!
فک کن اگه 100 تا TextBox داشتی !! می خواستی یه Array درست کنی با 100 تا آیتم !!

اما همین که با آرایه ها به این شکل کار کردی فوق العاده بود .
همین طور ادامه بده

یلدا سه‌شنبه 30 خرداد 1391 ساعت 07:12 ب.ظ

نکته مهم درباره foreach :
شما نمی توانید به کمک foreachمقدار متغییر هارا تغییر دهید .مثلاً کد زیر درست نیست.برای این کار می توان از حلقه forاستفاده کرد.
foreach (int temp in arrayOfInts)
{
temp++;
Console.WriteLine(temp);
}
با سلام
خیلی ممنون
خوب اگر ما بخواهیم از foreach استفاده کنیم به یک Collection احتیاج داریم ، و اگر قرار باشد که از نمونه قبلی ساده تر باشد و ما مجبور نباشیم نام آنهارا هم وارد آرایه کنیم به Collection ی احتیاج داریم که بتواند چند نوع مختلف(مثلاً textbox و comboBox)را در خود قرار دهد و تنها چیزی که به نظرم می رسد این است که باید خودC# چنین مجموعه ای را داشته باشد مثلاً تمام آیتم های یک فرم، و یا اینکه متدی داشته باشد که این آیتمها را برگرداند.ولی نمیدانم چطور میتوانیم مجموعه هایی را که از قبل در سیستم تعریف شده را ببینیم و اینکه این مجموعه ها دارای چه اعضایی هستند.
استاد بیشتر از یه کم برا حل این مسئله راهنمایی کنید ولی البته اگر خودتون حلش کنید خیلی خیلی بهتر است.

int[] myArray = new int[] { 1, 2, 3, 4, 5 };
string Result = string.Empty;

foreach (int item in myArray)
{
// item *= 10; Error !!

Result += item * 10 + "\n";
}

MessageBox.Show(Result.ToString());

یلدا سه‌شنبه 30 خرداد 1391 ساعت 09:54 ب.ظ

جواب سوال پاک کردن فرم با استفاده ازfoeach:
سلام
خیلی ممنون، حل شد
foreach (Control ctrl in this.Controls)
{
if (ctrl is TextBox)
ctrl.Text = string.Empty;
if (ctrl is ComboBox)
ctrl.Text = string.Empty;
if (ctrl is Label)
ctrl.Text = string.Empty;

}
و برای هر موردی که بخواهیم میتوانیم دستور if اضافه کنیم.


و اگر یک جواب خیلی کامل بخواهید مانند مثال زیر میشود.
private void clear(Control frm)
002 {
003 foreach (System.Windows.Forms.Control control in frm.Controls)
004 {
005 if (control is System.Windows.Forms.GroupBox)
006 {
007 foreach (System.Windows.Forms.Control b in control.Controls)
008 {
009 if (b is System.Windows.Forms.TextBox)
010 b.Text = "";
011
012 else if (b is System.Windows.Forms.ComboBox)
013 {
014 System.Windows.Forms.ComboBox ob = (System.Windows.Forms.ComboBox)b;
015 ob.SelectedIndex = -1;
016 }
017 else if (b is System.Windows.Forms.MaskedTextBox)
018 b.Text = "";
019 else if (b is System.Windows.Forms.CheckBox)
020 {
021 System.Windows.Forms.CheckBox ob = (System.Windows.Forms.CheckBox)b;
022 ob.Checked = false;
023 }
024 else if (b is System.Windows.Forms.PictureBox)
025 {
026 System.Windows.Forms.PictureBox ob = (System.Windows.Forms.PictureBox)b;
027 ob.Image = null;
028 }
029 }
030 }
031 else if (control is System.Windows.Forms.TextBox)
032 control.Text = "";
033 else if (control is System.Windows.Forms.ComboBox)
034 {
035 System.Windows.Forms.ComboBox ob = (System.Windows.Forms.ComboBox)control;
036 ob.SelectedIndex = -1;
037 }
038 else if (control is System.Windows.Forms.MaskedTextBox)
039 control.Text = "";
040 else if (control is System.Windows.Forms.CheckBox)
041 {
042 System.Windows.Forms.CheckBox ob = (System.Windows.Forms.CheckBox)control;
043 ob.Checked = false;
044 }
045 else if (control is System.Windows.Forms.PictureBox)
046 {
047 System.Windows.Forms.PictureBox ob = (System.Windows.Forms.PictureBox)control;
048 ob.Image = null;
049 }
050 }
051 }


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


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

محبوب سه‌شنبه 30 خرداد 1391 ساعت 11:05 ب.ظ

باعرض سلام وخسته نباشید
جواب تمرین :
مثالی از helper method
private void OnSearch(object sender, System.EventArgs e)
{
try
{
FillResult();
}
catch (Exception ex)
{
MessageBox.Show(String.Format(“Check your input: {0}”, ex.Message));
}
}
protected void FillResult()
{
using (DirectoryEntry root = new DirectoryEntry())
{
root.Username = username;
root.Password = password;
root.Path = String.Format(“LDAP://{0}{1}”, hostname,
defaultNamingContext);
using (DirectorySearcher searcher = new DirectorySearcher())
{
searcher.SearchRoot = root;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = textBoxFilter.Text;
searcher.PropertiesToLoad.AddRange(
listBoxProperties.SelectedItems.Cast < string > ().ToArray());
SearchResultCollection results = searcher.FindAll();
StringBuilder summary = new StringBuilder();
foreach (SearchResult result in results)
{
foreach (string propName in result.Properties.PropertyNames)
{
foreach (string s in result.Properties[propName])
{
summary.AppendFormat(“ {0}: {1}\r\n”, propName, s);
}
}
summary.Append(“\r\n”);
}
textBoxResults.Text = summary.ToString();
}
}
}
ببخشید بهم ریخته شده. ظاهراً مثل پازل باید 2باره کنارهم چیده بشن.

محبوب خیلی خوبه که تو اینترنت دنبال کد می گردی باعث میشه اینطوری کد های بیشتری ببینی و ذهنت باز بشه
اما به شرطی که بتونی کد رو درک کنی و حتی همون کد رو به زبون خودت بنویسی
برای این تمرین هم اگه یه کد ساده اما خودت نوشته باشی رو تحویل بدی خیلی بهتره
مرسی

محبوب چهارشنبه 31 خرداد 1391 ساعت 10:23 ق.ظ

استاد این کد از تو اینترنت نبود که. داخل کتاب Wrox که تو مطالب مفید گذاشته بودین دیدم.(p:1676)که توضیحاتش رو هم گفته. داشتم سرفصل هاشو نگاه میکردم که به ذهنم رسید ببینم مثالی ازhelper method داره که مطلبش برام بیشتر جا بیفته.
ولی در عین حال حق باشماست و بهتره خودم کدها رو بنویسم.
و استاد اگه میشه در مورد مطالبی مثل snippet و abstraction و پلی مورفیزم , Delegate و Deployment توضیح بدید.

چه خوب که اون کتاب رو میخونی
این مباحثی که گفتی جز سر فصل نیست اما به احتمال زیاد قبل از اتمام کلاس فقط تو وبلاگ میذارم

یلدا چهارشنبه 31 خرداد 1391 ساعت 12:29 ب.ظ

سلام استاد
ببخشید هرچقدر فکر کردم و امتحان کردم منظورتون رو از این قطعه کد که در جواب به من دادید رو نفهمیدم
پاسخ:
int[] myArray = new int[] { 1, 2, 3, 4, 5 };
string Result = string.Empty;

foreach (int item in myArray)
{
// item *= 10; Error !!

Result += item * 10 + "\n";
}

MessageBox.Show(Result.ToString());

یعنی این یک مثال نقض است برا نکته ای است که در باره foreach گفته بودم ؟؟؟؟ ینی منظورم رو درست توضیح نداده بودم؟؟؟ یا اشتباه شده؟؟؟؟
نمیدونم، من این مطلب رو وقتی دنبال موضوعforeach میگشتم تو اون کتاب C#انگلیسی که رو سایت گذاشته بودین دیدم، من این طور برداشت کردم که ما نمی تونیم مقدار اعضای خود آرایه رو عوض کنیم مثلاً اگر myArray[4]=70; باشد مابا استفاده از foreach نمیتونیم در آخر داشته باشیم که myArray[4]=80;و جای دیگه ای از برنامه از این مقدار جدید استفاده کنیم.

با تشکر

اگه دقت کنی در تایید حرف ِ تو بود

یلدا چهارشنبه 31 خرداد 1391 ساعت 12:59 ب.ظ

بازم سلام
واقعاً منظورم این نبود که شما جواب بدین، فقط یه کم داشتم کلافه میشدم که این همه وقت گذاشتم ولی به جواب نرسیدم و کلی کارهای دیگه ام مونده، میگن خیلی از آدمها کلی تلاش میکنند و فقط یک لحظه قبل از اینکه به موفقیت برسند ناامید میشوند و همه چیز رو خراب میکنند.
البته اگه میخواستم از کسی بپرسم بودند کسانی که به راحتی جوابم رو بدهند ولی از اونجایی که قراره من بعداً رو پروژه ای کارکنم و هر کاری هم بکنم بالاخره مسائلی پیش میاد که من نمیدونم چطور حل میشه باید یاد گیرم چطور خودم جواب سوالهام رو پیدا کنم در غیر این صورت اون کسی که جواب سوالها رومیده کار کرده نه من.
موفق باشید.

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد