ممنون آقا علی
آقا الان هر جا علامت | یک دونه ای اومد بهش میگن عملگر بیتی یا هر وقت عملگری بین اعداد اومدن بهشون میگن بیتی؟
آخه نام گذاری اگه بر اساس یک علامت | یا دو علامت || باشه یعنی اگه هر جا | اومد بگن بیتی یا هر جا || اومد بگن منطقی که ربطی نداره چون همه جا کار | اینه که همه ی شرط ها رو چک کنه و کار || اینه که به محض اولین شرط نقص کننده ، از اجرا صرف نظر کنه
بله، هر وقت | یا & رو بین اعداد صحیح دیدید مطمئن باشید که عملگر بیتی ئه و هر جا بین مقادیر بولی دیدید مطمئن باشید که عملگر منطقی ئه، عملگر های | و & شرطی نیستند، || و && شرطی اند.
و مجدد تاکید می کنم که | نماد دو عملگر کاملا متفاوت ئه، یکی شون عملگر بیتی یا باینری OR ئه و یکی شون عملگر منطقی OR ئه. هر جا در کد با | روبرو شدید با توجه به نوع مفادیری که در عملوند هایش می بینید
به سادگی می توانید تشخیص بدهید که عملگر بیتی است یا عملگر منطقی. در مورد & هم همینطور.
سئوال بعد اینکه اگه خاصیت location برای محور x ها یا y ها رو بخوایم جابا کنیم ، باید چجوری کد بنویسیم و چرا کد زیر غلط هه و باید چجوری نوشته شه؟ :
کد:
button12.Location.X = 150;
اینکه نمی توانید Location.X رو تغییر دهید مقصر خود button12 یا X یا Location نیست. دلیلش این است Point که Location از نوع آن است یک ساختار است، struct ئه، نه کلاس.
یک تفاوت اساسی میان struct و class این است که کلاس ها reference type اند و struct ها value type اند. به عبارت ساده یعنی اگر مقدار یک شیء کلاس را از یک متغیر در متغیر دیگری کپی کنید
همان شیء را در متغیر مقصد خواهید داشت، ولی اگر شیء ساختار را کپی کنید یک نسخه جدید ولی با مقادیر مشابه قبلی ساخته می شود.
وقتی مقدار Location را از button12 می خوانید به شما یک کپی از آن شی Point تحویل داده می شود نه خودش. کامپایلر برای این خطا می گیرد که شما متوجه این نکته باشید که شما دارید X یک نسخه کپی را عوض می کنید
که جایی هم ثبت نمی شود و و ربطی به Location ندارد.
یا Left را عوض کنید که همان مقدار X را تغییر می دهد و یا یک Point به Location تحویل بدهید :
کد:
button1.Location = new Point(150, button1.Top);
کد:
button1.Location = new Point(150, button1.Location.Y);
سوم اینکه من به جواب اون قضیه ی کد دادن به رویداد شی ای که موقع اجرای پروژه ایجاد میکنیم ، رسیدم (البته خیلی ممنون از روش تون) و اونم این جوری بود و حالا چون دلیگیت ها و این جور چیزا رو نرسیدم ، بعدا باید ساختارشو ببینم چیه دقیق :
کد:
private void button12_Click(object sender, EventArgs e)
{
Button CreatedObj = new Button();
Controls.Add(CreatedObj);
CreatedObj.Click += CreatedObj_Click;
}
private void CreatedObj_Click(object sender, EventArgs e)
{
MessageBox.Show("New Code For Created Object");
}
بعد از نوشتن علامت = در خط پنجم (آخرین خط رویداد button12_Click) ، دو بار دکمه tab رو بزنیم ، رویداد مورد نظر رو خودش میسازه که توش میتونیم کدهامونو بنویسیم (راحت تر از AMS بود کد جدید دادن توی سی شارپ )
البته شما هم همین کد رو گفتین ولی قسمت آخر که رویداد جدید با زدن tab ایجاد میشد رو فقط اضافه شد که از کدی که قبلا دادین خیلی ممنونم
اگر خواستید یک کنترل را روی فرم قرار دهید و بعدا با نام بهش دسترسی داشته باشید برایش مشخصه Name تعیین کنید :
کد:
Button b = new Button();
b.Name = "b1000";
Controls.Add(b);
کد:
Controls["b1000"].Text = "Exit";
و فراموش نکنید که فرم و هر کنترل دیگری که خودش کنترل های دیگری داخلش قرار می گیرد مثل GroupBox و Panel ها با مشخصه Controls به فرزند ها دسترسی دارند و Controls فقط مجموعه کنترل های فرزند است، نه نوه و نتیجه.
پس الزاما اون Controls فرم شامل همه کنترل هایی که روی فرم می بینید نیست یعنی اگر کنترلی رو فرضا در داخل GroupBox قرار دادید دیگه در Controls فرم دنبالش نگردید.