بایگانی

Posts Tagged ‘GUI’

نحوه اضافه کردن CheckBox به یک ToolStrip

همون طور که میدونید توی ToolStrip خبری از کنترلی تحت عنوان ToolStripCheckBox نیست و شما مجبورید که اون رو خودتون بسازید و به ToolStrip اضافه کنید.

به همین منظور من سراغ ToolStripControlHost رفتم و دست یاری ازش خواستم(وای، چه رمانتیک 😀 ).فهمیدن اینکه چطور بفهمیم که باید از ToolStripControlHost استفاده کنیم چندان هم سخت نیست.یک راهش اینترنت و یا msdn هست.اما هیچ وقت این کار رو نکنید.البته نمیگم از msdn استفاده نکنید. msdn بزرگترین منبعی هست که شما می تونید از اون استفاده کنید و در مشکلاتی که براتون پیش میاد ازش کمک بگیرید.اما راه بهتر و خلاقانه تری هم وجود داره که مجبور نباشید این همه برید search کنید تا بتونید راهی برای این موضوع پیدا کنید.

راهی که من استفاده می کنم استفاده از Designer هست.به این صورت که شما ابتدا یک ToolStrip به فرم و یک ToolStripItem هم به این کنترل اضافه کنید.برای مثال یک ToolStripTextBox.

حالا از پنجره Solution Explorer به قسمت Designer فرمتون برید و یا در پنجره کد مربوط به فرم، داخل سازنده فرم روی تابع InitializeComponent راست کلیک و روی Go To Definition کلیک کنید.در پایین این پنجره تعریف کنترل ها رو مشاهده می کنید.حالا روی ToolStripTextBox راست کلیک و گزینه Go To Definition رو انتخاب کنید.

خوب حالا تو این پنجره ای که مشاهده می کنید، می بینید که ToolStripTextBox از ToolStripControlHost ارث بری میکنه پس می فهمیم که باید کلاسی داشته باشم که تز تین کلاس ارث بری کنه.

اما بپردازید به بحث اصلی.

class ToolStripCheckBox : ToolStripControlHost

{

public ToolStripCheckBox() : base(new System.Windows.Forms.CheckBox()) { }

private CheckBox CheckBoxControl

{

get { return Control as CheckBox; }

}

public bool ToolStripControlEnabled

{

get { return CheckBoxControl.Enabled; }

set { CheckBoxControl.Enabled = value; }

}

protected override void OnSubscribeControlEvents(Control control)

{

base.OnSubscribeControlEvents(control);

CheckBox tsmCheckBox = (CheckBox)control;

tsmCheckBox.CheckedChanged += new EventHandler(OnCheckedChanged);

}

protected override void OnUnsubscribeControlEvents(Control control)

{

base.OnUnsubscribeControlEvents(control);

CheckBox tsmCheckBox = (CheckBox)control;

tsmCheckBox.CheckedChanged -= new EventHandler(OnCheckedChanged);

}

public event EventHandler CheckedChanged;

private void OnCheckedChanged(object sender, EventArgs e)

{

if (this.CheckedChanged != null)

{

CheckedChanged(this, e);

}

}

}

توضیحاتی که در این کلاس میشه داد:

ما در سطح این کلاس با CheckBox کار می کنیم و از event ها،Property ها و … ی اون استفاده می کنیم.چون ماهیت کنترل ما از نوع CheckBox است.

برای اضافه کردن رویدادی که در کلاس base ما وجود نداره، از override کردن متد OnSubscribeControlEvents و برای حذف اون از OnUnSubscribeControlEvents استفاده می کنیم.بقیه موارد هم که به قول معروف بسیار ضایع میباشند…

موفق و مؤید باشید.

Advertisements
دسته‌ها:C#.Net برچسب‌ها: , , , , ,