the_king
مدیرکل انجمن
نه، ربطی به ترکیب شدن و نشدن نداره، به این بستگی داره که رخداد فشار دادن چه کلیدی باشه، هیچ موقع و تحت هیچ شرایطی در KeyData مقادیر دو تا کلید نمیاد، فقط یک کلید ئه. وقتی دارید رخداد کلید A رو بررسی می کنید دیگه ControlKey نمیتونه داخلش باشه و بالعکس.ممنون استاد علی
ببخشید . اشتباه گفتم
اولا که اون مقدارهایی که آخرشون Key ندارن مثل Control رو Mask میگن و اونایی که دارن مثل ControlKey رو مقدار کلیدی میگن
دوما که برعکس گفتم و درستش میشه :
توی KeyData ، اگه کنترل رو به تنهایی مد نظرمون باشه ، باید هم مقدار کلید و هم مقدار mask اش رو با هم اور کنیم ولی وقتی دکمه ی ترکیبی میشه ، مقدار کلیدی رو نباید چک و اور کنیم! (فقط باید از mask و اون دکمه مثل A و کلا دکمه ی مورد نظرمون استفاده و اور کنیم)
این درسته ؟
وقتی Ctrl رو فشار می دهید خود ControlKey و Control باید باشه و وقتی A رو فشار می دهید (دیگه Ctrl رو قبلا فشار داده اید و رخدادش اتفاق افتاده و رفته پی کارش، الان رخداد فشار دادن A ئه، کاری به Ctrl نداره) برای Ctrl فقط Control رو بررسی می کنید.
لج چیه؟
اولا که کاربردشو میدونم . یعنی میدونم اگه مقدار آرایه ای مشخص باشه ، بهتره بجای لیست ها و arraylist ها از آرایه استفاده کنیم و دوما که اگه انواع مختلف داده ای نداشتیم ، بهتره از list ها بجای arraylist ها استفاده کنیم .
فقط برای اطلاعات بیشتر میخوام بدونم
ممنون بابت توضیح کامل متد add و اندیس و count و capacity
اما منظورمو فکر کنم کامل متوجه نشدین
ببینین مثلا یه arraylist با ظرفیت 5 عضو داریم بنابراین باید بتونیم با مشخص کردن اندیس ایندکسرش ، 5 تا عضو بهش بدیم دیگه؟ درسته؟ چون براش 5 تا خونه ی خالی در نظر گرفتیم . پس چرا نمیشه این کار رو کرد؟ یعنی کد زیر چرا ارور ArgumentOutOfRangeException رو میده؟ :
این درسته ؟
کاملا متوجه منظورتون شدم ولی مفهوم ظرفیت با تعداد اعضاء که یکی نیست. خیر ظرفیت هیچ ربطی به اینکه یهویی عضو 5 امی خلق بشه نداره. شما یک زمین صاف بهتون بدن 100 هکتار، ظرفیت 5 تا خونه رو راحت داره ولی خونه ای که توش نیست، چه پر و چه خالی. تعداد خونه ها 0 ئه. حالا بیاد زمین رو بزرگ کنید بشه 1000 هکتار. بازم ظرفیت هست ولی خونه ای وجود نداره، چه پر و چه خالی. 1000 هکتار زمین خالی دارید ولی خونه های خالی کجای این زمین ئه که بخواهید در خونه چهارم مقدار بدید؟ چیزی وجود نداره.
کد:ArrayList arr = new ArrayList(5); arr[0] = 3;
این کدی که نوشتید ارتباطی با اون مفهوم Capacity نداره. این چیزی که تغییر دادید Length ئه، مثل Count ئه، براش خونه ایجاد میشه.
کلا CreateGraphics در داخل Paint نباید انجام بشه، هر بارم اجرا بشه Graphics جدید ایجاد میشه، کاری به موارد قبلی و بعدی نداره.گرافیک رو از همون شی موجود بگیریم هم شی جدیدی ایجاد میکنه؟
پس باید شی گرافیک رو از متغییر رویدادی بگیریم دیگه؟
اما چرا پس توی رویداد paint برای کنترل form1 و usercontrol ها اون کدم مشکلی نداشت (مثلا برام فرم ، با همین this.CreateGraphics() شی گرافیک میگرفتم) ؟
اصولا نباید برای کنترل خودتون Graphics بسازید، باید رسم رو واگذار کنید به Paint. اگه قراره این لحظه رسمی صورت بگیره کنترل رو Invalidate یا Refresh کنید تا Paint رخ بده. هر رسمی هست داخل Paint انجام بدید. Graphics رو جاهایی میسازند که رسمی در کار نیست، مثلا موقعی که قراره روی Bitmap ای چیزی رسم بشه یا قراره ابعاد یک Font ای بررسی بشه و ...
بستگی داره که مشکل رو به چی بگید. سه تا حالت پیش میاد، یا رسمی بعد از کد شما انجام نمیشه و تداخلی مشاهده نمیشه (در حالی که از اصل اشکال داره)، یا بعد از رسم شما رسمی صورت می گیره و رسم شما پاک میشه و یا بخاطر عدم دسترسی به منابع اصلا Graphics نمیسازه و کد با خطا متوقف میشه.
اما چرا پس توی رویداد paint برای کنترل form1 و usercontrol ها اون کدم مشکلی نداشت (مثلا برام فرم ، با همین this.CreateGraphics() شی گرافیک میگرفتم) ؟