
نوشته شده توسط
MH2538
سلام
یه نمونه برنامه همراه این مطلب فرستادم . فکر کنم دقیقاً همون چیزی باشه که شما لازم داری.
private void bRetry_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Retry;
}
با تشکر از زحمتتان، در فرم frmMessage این کدها را برداشتم چونکه احتیاجی بهشان نیست:
privatevoid bRetry_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Retry;
}
privatevoid bOK_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
}
privatevoid bCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
}
در Form1 ابجکت را بوجود میاریم ب بلافاصله بعد از استفاده رهایش میکنیم. به همین خاطر احتیاجی نیست که frmMessage یک فیلد از Form1 باشه.
در ضمن اگر قراره که وظیفه frmMessage این باشه که یک مساج نشان بده. این را باید در کد کاملا مشخص کرد که جایی برایه ابهام باقی نماند ، بخاطر همین کد را ا به frmMessage اضافه میکنیم و در Form1 کالش میکنیم:
publicstring ShowMessage(string Message)
{
this.lMsg.Text = Message;
this.ShowDialog();
returnthis.DialogResult.ToString();
}
در ضمن در frmMessage احتیاجی نیست که Label1 پابلیک باشد، این روش پابلیک کردن کنترلهایه یک فرم برایه دسترسی بهشان عادتیه که برنامه نویسان تنبل و بدانه دیسیپلین رایج کردهاند، شما ازش پرهیزی کنید و به جمعشان نپیوندید :) من دوباره این لیبل را پرایوتش کردم.
حالا در Form1 فقط کنترل را بوجود میاریم و ازش درخواست میکنیم که وظیفه ShowMessage را انجام بده، فرق این روش این است که ما دیگر در Form1 با اشیائ داخلی frmMessage کاری نداریم و احتیاجی به دانستن اینکه باید لیبلش را مقدار بدیم نداریم. تنها راهی هم که میشه استفادهاش کرد دقیقا مشخص است (چونکه مساج را در یک پارامتر بهش پاس میدیم).
با اجازهتان مثالتان را یکمی تغییر دادم.