PDA

View Full Version : سوال: public کردن modifier کنترل هایی که با کد نوشتیم



erfan_urchin
دوشنبه 26 فروردین 1392, 22:15 عصر
سلام
من مثلا چندتا Checkbox با کد نوشتم که در فرم لود ایجاد میشن. تو ایجاد شدنشون مشکلی نیست
اما من میخوام هرکدوم که ایجاد میشه modifier هم public بشه
اما نمیشه. چیکار کنم؟
کد من اینه اما از خط سوم ایراد میگره. در واقع تو اون پنجره ای که باز میشه و تمام پراپرتی ها و غیره توش نوشته شده Modifiers نداره
cb = new CheckBox();
cb.Name = "cb" + i.ToString();
cb.Modifiers=public
cb.Text = dt.Rows[i][1].ToString();
cb.Location = new Point(5, 10 + i * 25);
this.Controls.Add(cb);
خیلی لازمش دارم لطفا کمک کنید

mmd2009
دوشنبه 26 فروردین 1392, 22:30 عصر
با سلام

Modifires یک Property در Design-Time هست یا به اصطلاح این پروپرتی فقط توسط طراح تعیین میشه و کاربر نقشی در تغییر اون نداره

در چنین مواقعی بهتره شما بگید میخوایید چیکار بکنید تا دوستان روش های مناسبی بهتون بگن

موفق باشید

erfan_urchin
دوشنبه 26 فروردین 1392, 22:38 عصر
من میخوام تو یک فرم دیگه تکست این چک باکس رو بریزم تو یک متغیر string:متفکر:
تا اونجایی که میدونم برای این که از خصوصیات یک کنترل مثل Text و غیره تو یک فرم دیگه استفاده کنیم باید modifiers اون کنترل رو public کنیم
حالا میخوام ببینم چجوری میشه این کارو کرد؟؟؟؟

plus
دوشنبه 26 فروردین 1392, 23:04 عصر
شما در UserControl خودتون یک property جدید تعریف کنید و مقدار متن CheckBox رو برگردونید.در فرم، ازین Property برای دستیابی به متن CheckBox (به صورت غیر مستقیم) استفاده کنید.

class MyUserControl : UserControl
{
// ...
public string SomeText
{
get { return checkBox1.Text; }
}
// ....
}

erfan_urchin
دوشنبه 26 فروردین 1392, 23:18 عصر
شما در UserControl خودتون یک property جدید تعریف کنید و مقدار متن CheckBox رو برگردونید.در فرم، ازین Property برای دستیابی به متن CheckBox (به صورت غیر مستقیم) استفاده کنید.

class MyUserControl : UserControl
{
// ...
public string SomeText
{
get { return checkBox1.Text; }
}
// ....
}


ولی این نمیشه!!
چون من چک باکس هارو با کد ایجاد کردم و تعداد چک باکس ها هم به تعداد ردیف های DataTable هستش. پس باید یه حلقه بزارم که چک کنه هر کدوم تیک خورده بود تکستشو بریزه تو یک متغیر
من تنها مشکلم اینه که باید تو یک فرم دیگه این کدهارو بنویسم برای همین بهشون دسترسی ندارم. اگه تو همون فرم بود میتونستم بهشون دسترسی پیدا کنم :ناراحت:
لطفا کمک کنید:ناراحت:

plus
دوشنبه 26 فروردین 1392, 23:46 عصر
اگه قراره فقط یک text برگرده، شما حلقه رو درون get مربوط به اون property بگذارید، یعنی در خود UserControl که به CheckBox ها دسترسی دارید.

class MyUserControl : UserControl
{
// ...
public string SomeText
{
get
{
for ....
return result;
}
}
// ....
}

اگه قراره بیش از یک مقدار برگرده، باز میتونید به همین روش عمل کنید و آرایه ای از رشته ها رو برگردونید:


class MyUserControl : UserControl
{
// ...
public string[] SomeText
{
get
{
List<string> MyList = new List<string>();
for ....
return MyList.ToArray();
}
}
// ....
}

اگه هم میخواین کلا حلقه و عملیات رو در فرم انجام بدین، بجای ایجاد دسترسی مسقیم به CheckBox ها، میتونید متدها و property های مناسب رو در UserControl بگذارید تا از Form به وضعیت CheckBox ها دسترسی داشته باشید، مثلا:

class MyUserControl : UserControl
{
// ...
public ItemCount
{
get
{
return [Number of checkboxes];
}
}
public bool IsItemChecked(int Index)
{
return [true if specified checkbox is checked, false otherwise];
}
public bool GetItemText(int Index)
{
return [text of the specified checkbox];
}
// ....
}

اگه هم میخواین راحت ترین کار و بدترین کار رو انتخاب کنید، متغیر هایی که توشون CheckBox رو new میکنید رو به صورت public تعریف کنید، مثلا لیستی از CheckBox ها:

class MyUserControl : UserControl
{
public List<CheckBox> MyCheckBoxes = new List<CheckBox>();
private void UserControl_Load(object sender, EventArgs e)
{
CheckBox cb = new CheckBox();
MyCheckBoxes .Add(cb);
}
}

اینطوری توی فرم به مشخصه MyCheckBoxes که لیستی از CheckBox های شما در userControl هست دسترسی دارید.

erfan_urchin
دوشنبه 26 فروردین 1392, 23:50 عصر
اگه قراره فقط یک text برگرده، شما حلقه رو درون get مربوط به اون property بگذارید، یعنی در خود UserControl که به CheckBox ها دسترسی دارید.

class MyUserControl : UserControl
{
// ...
public string SomeText
{
get
{
for ....

}
}
// ....
}


بله دقیقا منم همین کارو کردم
اما وقتی میخوام تو حلقه بنویسم i<dt.Rows.Count اصلا dt رو نمیشناسه (dt همون DataTable هستش)

plus
دوشنبه 26 فروردین 1392, 23:56 عصر
بله دقیقا منم همین کارو کردم
اما وقتی میخوام تو حلقه بنویسم i<dt.Rows.Count اصلا dt رو نمیشناسه (dt همون DataTable هستش)
خوب بستگی داره شما dt رو کجا تعریف کردین.