PDA

View Full Version : سوال: cast sender



mehdi_csharp
سه شنبه 28 دی 1389, 20:34 عصر
در این کد وقتی روی ok کلیک شود this.Control_Validating(control, cancelEventArgs);
فراخوانی میشه که پارامتر ارسالی اش یک کنترل است چگونه sender در کد ( sender is textbox)
به عنوان یک instance شناسایی میشود در صورتی که در یک کد مثل
TextBox f = new TextBox();
Control g = (Control)f;
TextBox w=g;
جواب نمیده؟


\\agar dar ebteda ok click shavad.
private void OK_Click(object sender, EventArgs e)
{
Control[] controls = new Control[] { this.Code, this.FirstName, this.LastName, this.Email, this.Telephone, this.Country, this.Address };
CancelEventArgs cancelEventArgs = new CancelEventArgs() { Cancel = false };

foreach (Control control in controls)
{
control.Focus();
this.Control_Validating(control, cancelEventArgs);

if (cancelEventArgs.Cancel)
return;
}
}

private void Control_Validating(object sender, CancelEventArgs e)
{
this.ErrorProvider.Clear();

if (sender is TextBox)
{
TextBox textBox = (TextBox)sender;

if (textBox.Name == "Email")
{
if (IsEmail(textBox.Text))
{
e.Cancel = false;
return;
}
}
}

AmirHarirbafan
سه شنبه 28 دی 1389, 21:57 عصر
اگه کدتون رو به این صورت تغییر بدید


TextBox f = new TextBox();
Control g = (Control)f;
TextBox w = (TextBox)g;
اونوقت کد درست جواب خواهد داد.
در این مثال f و w از نوع TextBox خواهند بود.
همچنین g که از نوع Control تعریف شده است، باز هم از نوع TextBox خواهد بود

mehdi_csharp
سه شنبه 28 دی 1389, 22:52 عصر
من با این مو ضوع مشکل ندارم من با خط if (sender is TextBox) در کد مشکل دارم که با اینکه sender از نوع control اما باز هم آن را در خط
if (sender is TextBox) به عنوان یه textbox در نظر میگیره ؟؟فکر نکنم cast هم باشه!!!

georgiaro
چهارشنبه 29 دی 1389, 02:22 صبح
سلام
خوب control یه سطح بالا تر از textbox .
یعنی هر textbox ای یه control هم هست ولی هر control ای لزوما textbox نیست.
امید وارم این کمکی کرده باشه.
در ضمن شما دقیقا چه مشکلی دارید؟؟