With این امکان رو به ما می ده که یک مجموعه یا Object یا ساختار داده ای پیشفرض رو معرفی کنیم،
در فاصله مابین آن With تا جایی که با End With انتهای اونو مشخص کنیم.
این عمل دو ویژگی مثبت داره، اول اینکه لازم نیست واسه عضوهای مجموعه بصورت مداوم نام مجموعه اصلی
را تکرار کنیم. مثلا اگر من سه عضو A و B و C را در مجموعه MyDataType صدا بزنم اصولا می نویسم :
کد:
MyDataType.C = MyDataType.A + MyDataType.B + MyDataType.C
اما با استفاده از With از نام مجموعه فاکتور گیری می کنم :
کد:
With MyDataType
.C = .A + .B + .C
End With
طبیعی است که استفاده از With هم کد را خلاصه می کنه و هم امکان اشتباه رو کم می کنه چون وقتی شما
کاراکتر نقطه (.) را در هنگام کد نویسی تایپ می کنید، مجموعه عضوهای MyDataType به نمایش درمیاد.
دومین خاصیت مثبت With اینه که سرعت اجرا شدن کد را افزایش می ده، مخصوصا اگر مجموعه ها تو در تو باشند،
چون ارجاع غیر مستقیم ما را به یک ارجاع مستقیم تبدیل می کنه و از قسمت از ارجاع فاکتور گیری میشه.
در ادامه کدی که من نوشته بودم بایستی متن فعلی داخل Text1 فیلتر بشه تا کاراکترهای غیر مجاز حذف شوند.
اما دو نکته وجود داره، نکته اول اینه که ممکنه در همون زمان که ما داریم متن رو فیلتر می کنیم، کاربر هم متن
داخل TextBox را عوض کنه، و این عمل کاربر روی عملکرد روتین ما تاثیر منفی داره.
پس ما قبل از انجام هر گونه عملیاتی، یک کپی از متن فعلی Text1 می گیریم و اونو فیلتر می کنیم و نه متن Text1 را.
نکته دوم این است که وقتی شما متنی را در یک TextBox قرار می دهید، مکان نما (Cursor) بصورت خودکار در اول
متن قرار می گیرد (موقعیت صفر). و البته که این عمل دلخواه ما نیست، ما نمی خواهیم با هر بار تایپ یک کاراکتر،
مکان نما به اول متن برگردد، این حالت از نظر کاربر غیر طبیعی است و مشکل ساز است.
برای همین ما نه تنها از متن داخل Text1 کپی می گیریم، بلکه موقعیت فعلی مکان نما را هم ذخیره می کنیم تا بعد
از اتمام عملیات، دوباره مکان نما را به آن نقطه برگردانیم.
بقیه کد هم یک حلقه است که کاراکتر به کاراکتر از متن Text را در رشته CharSet جستجو می کند. CharSet یک رشته است
که تمامی کاراکترهایی که از نظر ما مجازند داخل وجود دارند. اگر کاراکتر مورد نظر در آن وجود داشت، به رشته Str
اضافه می شود ولی اگر غیر مجاز بود این عمل صورت نمی پذیرد.
در انتهای این حلقه Str برخلاف Text فقط شامل کاراکترهای مجاز است و بقیه در آن وجود ندارند.
طبق نکته دومی که گفتم پس از انتقال Str به داخل Text1، موقعیت مکان نما را هم به وضعیت اصلی برمی گردانیم.