۱۱

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);
        }
    }
}