Event Handling و User Interaction 🖱️
یاد بگیریم چطور رویدادها رو مدیریت کنیم و با کاربر تعامل برقرار کنیم!
رویداد Click: محبوبترین رویداد!
رویداد `Click` وقتی اتفاق میافته که کاربر روی یه کنترل (مثل دکمه) کلیک کنه. این پرکاربردترین رویداد تو Windows Forms هست! با این رویداد میتونیم به کلیک کاربر واکنش نشون بدیم.
// در Designer یا در کد
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("سلام! دکمه کلیک شد!");
}
// اتصال رویداد در کد
button1.Click += button1_Click;
// یا به صورت مستقیم
button1.Click += (sender, e) =>
{
label1.Text = "دکمه کلیک شد!";
};
رویدادهای TextBox: تعامل با متن
TextBox رویدادهای مختلفی داره که میتونیم ازشون استفاده کنیم: TextChanged (تغییر متن)، KeyPress (فشردن کلید)، و Enter/Leave (ورود/خروج فوکوس).
// تغییر متن
private void textBox1_TextChanged(object sender, EventArgs e)
{
label1.Text = $"تعداد کاراکترها: {textBox1.Text.Length}";
}
// فشردن کلید
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// فقط اعداد مجاز باشند
if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
{
e.Handled = true; // کلید رد میشود
}
}
رویدادهای فرم: مدیریت کل برنامه
خود فرم هم رویدادهای مهمی داره: Load (بارگذاری فرم)، FormClosing (بستن فرم)، و Resize (تغییر اندازه). اینها برای مدیریت کل برنامه مفیدن.
// بارگذاری فرم
private void Form1_Load(object sender, EventArgs e)
{
label1.Text = "خوش آمدید!";
textBox1.Focus(); // فوکوس روی TextBox
}
// بستن فرم
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show("آیا مطمئن هستید؟",
"خروج", MessageBoxButtons.YesNo);
if (result == DialogResult.No)
e.Cancel = true; // بستن لغو میشود
}
تمرین! 🧠
یه فرم بساز که شامل یه TextBox برای نام، یه Button برای "سلام"، و یه Label برای نمایش پیام باشه. وقتی کاربر اسمش رو وارد کرد و دکمه رو زد، پیام "سلام [نام]!" نمایش داده بشه. اگه TextBox خالی بود، پیام خطا نشون بده.
جواب تمرین
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSayHello_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtName.Text))
{
MessageBox.Show("لطفاً نام خود را وارد کنید!", "خطا",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtName.Focus();
return;
}
lblMessage.Text = $"سلام {txtName.Text}!";
lblMessage.ForeColor = Color.Green;
}
private void txtName_KeyPress(object sender, KeyPressEventArgs e)
{
// اگر Enter زده شد، دکمه رو کلیک کن
if (e.KeyChar == (char)Keys.Enter)
{
btnSayHello_Click(sender, e);
}
}
}