خاصیت Anchor

یکی از مشکلات قرار دادن کنترل‌ها بر روی کنترل فرم این است که، مکان آنها هنگام تغییر سایز فرم تغییر نمی‌کند و در جای قبلی می‌مانند. به عنوان مثال، یک فرم ساده همراه با چند کنترل در داخل آن ایجاد می‌کنیم. وقتی برنامه را اجرا می‌کنیم، هیچ چیز اشتباهی به چشم نمی‌خورد.
anchor-dock-01
اما وقتی فرم را به وسیله کشیدن گوشه‌های آن و یا با زدن دکمه بیشینه، بزرگ می‌کنیم، مشکل معلوم می‌شود.
anchor-dock-02
به عکس بالا که اندازه آن به اندازه صفحه دسکتاپ بزرگ کرده‌ایم، توجه کنید. همانطور که مشاهده می‌کنید مکان کنترل‌ها با افزایش اندازه فرم تغییر نمی‌کند. برای برطرف کردن این مشکل می‌توان از خاصیت Anchor که در بیشتر کنترل‌ها در دسترس است، استفاده نمود. این خاصیت رفتار کنترل‌ها را در هنگام تغییر سایز فرم تعیین می‌کند. می‌توانیم مشخص کنیم که کنترل به کدام گوشه فرم بچسبد. همچنین تعیین کنیم که کنترل‌ها چگونه تغییر سایز دهند.
اجازه بدهید که خاصیت Anchor را به کنترل‌هایمان اختصاص دهیم تا رفتار طبیعی‌تری هنگام تغییر سایز فرم از خود نشان دهند. خاصیت Anchor یک مقدار از نوع شمارشی System.Windows.Forms.AnchorStyles قبول می‌کند.

مقدار شمارشی توضیح
Bottom کنترل به قسمت پایینی مکان یا کنترلی که در آن قراردارد، می‌چسبد.
Left کنترل به قسمت چپ مکان یا کنترلی که در آن قراردارد، می‌چسبد.
Right کنترل به قسمت راست مکان یا کنترلی که در آن قراردارد، می‌چسبد..
Top کنترل به بالای مکان یا کنترلی که در آن قراردارد، می‌چسبد.
None کنترل به هیچ قسمتی از مکان یا کنترلی که در آن قراردارد، نمی‌چسبد.

این خاصیت در همه کنترل‌ها در حالت پیشفرض ترکیبی از مقادیر Top و Left است. وقتی مقادیر AnchorStyles را به خاصیت Anchor تخصیص می‌دهیم، فاصله کنترل از گوشه خاصی از فرم با وجود تغییر اندازه فرم حفظ می‌شود. به عنوان مثال اجازه بدهید که کنترل دکمه زیر را به سمت راست فرم بچسبانیم.
anchor-dock-05
ویژوال استودیو و ویژوال سی شارپ دارای ابزاری برای تعیین AnchorStyles می‌باشند. کنترلی را که می‌خواهید به یکی از گوشه‌ها بچسبانید، انتخاب کنید. به پنجره Properties رفته و خاصیت Anchor را پیدا کنید.
anchor-dock-03
بر روی دکمه‌ای که به شکل یک فلش رو به پایین است (شکل بالا) کلیک کنید تا شکل زیر ظاهر شود:
anchor-dock-04
مربعی که در وسط شکل زیر قرار دارد نماینده کنترل است. مربعی که به رنگ خاکستری است گوشه‌ای را نشان می‌دهد، که قرار است کنترل به آن بچسبد. شما به راحتی و با کلیک بر روی این مربع‌ها می‌توانید مقادیر AnchorStyle مربوط به کنترل را اضافه یا حذف کنید. حال برای چسباندن دکمه مثال بالا به سمت چپ فرم بر روی مربع سمت راست کلیک می‌کنیم تا رنگ آن مانند شکل زیر خاکستری شود.
anchor-dock-06
برنامه را اجرا کرده و اندازه فرم را تغییر می‌دهیم. اندازه فاصله دکمه از گوشه راست فرم، را در حالت عادی و در حالتی که فرم را تغییر اندازه می‌دهیم مقایسه می‌کنیم.
anchor-dock-07anchor-dock-08
همانطور که مشاهده می‌کنید، این فاصله قبل و بعد از تغییر اندازه فرم یکسان است. حال اجازه بدهید که مقدار Bottom را هم اضافه کنیم.
anchor-dock-09
با ترکیب دو مقدار Right و Bottom، کنترل همیشه در فاصله یکسانی از گوشه سمت راست و چپ کنترل فرم قرار می‌گیرد. وقت آن رسیده که مقادیری را که مخالف همدیگر هستند را اضافه کنیم و مشاهده کنیم که چه اتفاقی برای کنترل می افتد. به عنوان مثال مقدار Left مخالف مقدار Right است. انتظار ما این است که، کنترل با فاصله یکسانی از سمت چپ و راست فرم قرار بگیرد.
anchor-dock-10
برنامه را اجرا کرده و فرم را تغییر اندازه دهید.
anchor-dock-11
anchor-dock-12
اندازه دکمه در دو جهت مخالف هم تغییر می‌کند. اگر خاصیت Anchor کنترل را در چهار جهت مشخص کنیم، اندازه دکمه به صورت افقی و عمودی در همه جهات تغییر می‌کند. اما وقتی مقدار خاصیت Anchor را برابر AnchorStyles.None قرار دهیم، کنترل رفتار متفاوتی از خود نشان می‌دهد. در این حالت وقتی کنترل فرم را تغییر اندازه دهیم، کنترل به اندازه نصف تغیر اندازه فرم و در جهت تغییر اندازه آن حرکت می‌کند.
به عنوان مثال اگر فرم را به اندازه 100 پیکسل و در جهت راست تغییر اندازه دهیم، کنترل به اندازه 50 پیکسل به سمت راست حرکت می‌کند و اگر فرم را به اندازه 100 پیکسل در جهت راست و 50 پیکسل در جهت پایین تغییر اندازه دهیم، کنترل 50 پیکسل در جهت راست و 25 پیکسل در جهت پایین حرکت می‌کند.