PDA

View Full Version : استفاده از TextBox به عنوان پارامتر در Generic



Developer Programmer
جمعه 06 اردیبهشت 1392, 20:26 عصر
درون کلاس، لازمه پراپرتی Text از کنترلهای Label یا TextBox رو Set کنم.

میخوام به جای OverLoad کردن و نوشتن دو تابع با نامهای یکسان ، از Generic استفاده کنم


public class stuff
{
public static void SetText<T>(T t)
{
if (t is TextBox)
{
((TextBox)t).Text = "This is TextBox";
}
}
}

اما پیغام میده که Can not convert type T to TextBox :افسرده:

plus
جمعه 06 اردیبهشت 1392, 20:33 عصر
public class stuff
{
public static void BindGridView<T>(T t)
{
if (t is TextBox)
{
TextBox textBox = t as TextBox;
textBox.Text = "This is TextBox";
}
}
}

مطمئینید که این روش برای هدفتون مناسب هست؟ این یکی رو ببینید:

public class stuff
{
public static void BindGridView(Control control)
{
if (control is TextBox)
{
control.Text = "This is TextBox";
}
else if (control is Button)
{
//
}
}
}

Developer Programmer
جمعه 06 اردیبهشت 1392, 20:40 عصر
قصدم یادگیری Generic بود. واسه همین سعی کردم با Generic پیاده سازی کنم.

tooraj_azizi_1035
جمعه 06 اردیبهشت 1392, 20:58 عصر
سلام
کافیه از قید where استفاده کنید:



public class stuff
{
public static void SetText<T>(T t) where T: Control
{


t.Text="This is a text";

}
}

Developer Programmer
جمعه 06 اردیبهشت 1392, 23:45 عصر
کافیه از قید where استفاده کنید:ممنون
برای DataGridView جواب نداد.
مثلا میخوام بگم اگه DataGridView مربوط به خود ویژوال استدیو باشه یه جور Bind کن. اگه مربوط به مجموعه Telerik باشه یه جور دیگه.
if (t is DataGridView)
{
t.Rows.Add(4);
}
راستی اگه Where رو استفاده نکنم، چطور میتونم بفهمم نوع آبجکتی که برام پاس شده چیه و اون رو استفاده کنم؟ مثلا چطور بدون استفاده از Where بفهمم DataGridView پاس شده یا مثلا TextBox ؟

Mahmoud.Afrad
شنبه 07 اردیبهشت 1392, 10:24 صبح
کدهای plus (http://barnamenevis.org/member.php?8256-plus) و tooraj_azizi_1035 (http://barnamenevis.org/member.php?41757-tooraj_azizi_1035) رو ترکیب کن(t رو به کنترلی که در if چک میکنید cast کنید):

public class stuff
{
public static void SetText<T>(T t) where T : Control
{
if (t is TextBox)
{
t.Text = "This is a TextBox";
}
else if (t is ListBox)
{
ListBox lb = t as ListBox;
lb.Items.Add("This is a ListBox");
}
else if (t is DataGridView)
{
DataGridView dgv = t as DataGridView;
dgv.Rows.Add("This is a DataGridView");
}
}
}