PDA

View Full Version : سوال: نشناختن کلمه control



bmvgod
جمعه 16 مهر 1395, 06:07 صبح
باسلام خدمت دوستان
من یک کلاس برای پاک کردن کلیه کنترل هام ایجاد کردم ولی کلمه control رو نمیشناسه و پیغام زیر رو میده:


The type or namespace name 'Control' could not be found (are you missing a using directive or an assembly reference?)


از کد زیر استفاده کردم:

public static void ResetAllControls(Control form)
{
foreach (Control control in form.Controls)
{
if (control is TextBox)
{
TextBox textBox = (TextBox)control;
textBox.Text = null;
}


if (control is ComboBox)
{
ComboBox comboBox = (ComboBox)control;
if (comboBox.Items.Count > 0)
comboBox.SelectedIndex = 0;
}


if (control is CheckBox)
{
CheckBox checkBox = (CheckBox)control;
checkBox.Checked = false;
}


if (control is ListBox)
{
ListBox listBox = (ListBox)control;
listBox.ClearSelected();
}
}
}

چکار باید کنم؟
ممنون میشم راهنماییم کنید

ronix3
جمعه 16 مهر 1395, 09:29 صبح
using System.Windows.Forms;

رو به کلاس اضافه کنید

bmvgod
جمعه 16 مهر 1395, 20:36 عصر
حالا این کلاسی که ساختم رو چطوری توی فرم،روی دکمه مورد نظرم فراخوانیش کنم؟
اسم کلاسمو گذاشتم: cClearTextBox

mrprestige
جمعه 16 مهر 1395, 20:59 عصر
سلام دوست من برای فراخوانیش اینطوری میتنوی بنویسی

cClearTextBox.ResetAllControls( نام کنترل مورد نظر);

bmvgod
جمعه 16 مهر 1395, 21:15 عصر
سلام دوست من برای فراخوانیش اینطوری میتنوی بنویسی

cClearTextBox.ResetAllControls( نام کنترل مورد نظر);



وقتی این دستور رو به این صورت می نویسم:

cClearTextBox.ResetAllControls(TextBox);

خطای زیر رو میده:
'System.Windows.Forms.TextBox' is a 'type' but is used like a 'variable'

چکار باید کنم؟

اگه نخوام نام کنترل خواصی رو ببرم و بصورت کلی خودش چک کنه اگه پر بود خالی کنه؟
با تشکر از شما دوست عزیز

mr.sirwan
جمعه 16 مهر 1395, 21:50 عصر
وقتی این دستور رو به این صورت می نویسم:

cClearTextBox.ResetAllControls(TextBox);

خطای زیر رو میده:
'System.Windows.Forms.TextBox' is a 'type' but is used like a 'variable'

چکار باید کنم؟

اگه نخوام نام کنترل خواصی رو ببرم و بصورت کلی خودش چک کنه اگه پر بود خالی کنه؟
با تشکر از شما دوست عزیز

دوست عزیز شما اومدین یک نوع کنترلی به متدتون پاس دادین، باید اسم کنترل رو بدین نه نوعش رو، مثلا اسم آبجکت فرمتون frmMain هستش، باید این آبجکت رو به عنوان پارامتر به متد ارسال کنین

ronix3
جمعه 16 مهر 1395, 21:53 عصر
شما باید اسم فرمتون رو بدید بعد همه کنترل هاشو خالی می کنه اگه می خواید مثلا فقط تکست باکس رو خالی کنه باید یه خورده تغییر بدید

mrprestige
جمعه 16 مهر 1395, 22:04 عصر
دوست من ، طبق فرمایشات دوستان شما نمیتونید طبق ورودی که به تابع دادید که خواستید ورودی یک نوع کنترلی باشه بیاید دوباره نوع خاصی از کنترل ها رو تعریف کنید . باید نام اون نوع کنترل باشه . اگه میخوای یه کنترل ( به عنوان مثال Textbox) ریست بشه توی کلاس فرم به این صورت بنویسید

public void R()
{
foreach (Control x in this.Controls)
{
if (x is TextBox)
((TextBox) x).Text = string.Empty;
}
}


ودر نهایت متد () R داخل کنترل مورد نظرت فراخوانی کن

bmvgod
جمعه 16 مهر 1395, 22:04 عصر
شما باید اسم فرمتون رو بدید بعد همه کنترل هاشو خالی می کنه اگه می خواید مثلا فقط تکست باکس رو خالی کنه باید یه خورده تغییر بدید

باز همون error رو میده

bmvgod
جمعه 16 مهر 1395, 22:34 عصر
دوست من ، طبق فرمایشات دوستان شما نمیتونید طبق ورودی که به تابع دادید که خواستید ورودی یک نوع کنترلی باشه بیاید دوباره نوع خاصی از کنترل ها رو تعریف کنید . باید نام اون نوع کنترل باشه . اگه میخوای یه کنترل ( به عنوان مثال Textbox) ریست بشه توی کلاس فرم به این صورت بنویسید

public void R()
{
foreach (Control x in this.Controls)
{
if (x is TextBox)
((TextBox) x).Text = string.Empty;
}
}


ودر نهایت متد () R داخل کنترل مورد نظرت فراخوانی کن
الان اگه فقط بخوام این کلاس رو فرا خوانی کنم چکار باید کنم؟
اگه میشه کامل راهنماییم کنید؟
روی فرمم هم textbox دارم هم combobox

mrprestige
جمعه 16 مهر 1395, 22:36 عصر
بنده که عرض کردم ، توی کنترل مورد نظرتون کافیه بنویسید ;()R

mr.sirwan
جمعه 16 مهر 1395, 23:16 عصر
الان اگه فقط بخوام این کلاس رو فرا خوانی کنم چکار باید کنم؟
اگه میشه کامل راهنماییم کنید؟
روی فرمم هم textbox دارم هم combobox

دوست عزیز شما فقط کافیه این خط رو در رویداد کلیک یک button قرار بدین:


cClearTextBox.ResetAllControls(this);


کلمه this به فرم جاری اشاره داره، حالا اونطوری که شما متدتون رو نوشتین میاد و همه کنترل های روی فرم رو ریست میکنه

bmvgod
جمعه 16 مهر 1395, 23:40 عصر
دوست عزیز شما فقط کافیه این خط رو در رویداد کلیک یک button قرار بدین:


cClearTextBox.ResetAllControls(this);


کلمه this به فرم جاری اشاره داره، حالا اونطوری که شما متدتون رو نوشتین میاد و همه کنترل های روی فرم رو ریست میکنه

اگه کنترلام داخل Grop Box تغییری در کد باید بدم؟

Mahmoud.Afrad
شنبه 17 مهر 1395, 01:19 صبح
اگه کنترلام داخل Grop Box تغییری در کد باید بدم؟

متد رو به صورت بازگشتی هم میتونید بنویسید
public static void ResetAllControls(Control form)
{
foreach (Control control in form.Controls)
{
//.......

if (control.HasChildren)
{
ResetAllControls(control);
}
}
}

bmvgod
شنبه 17 مهر 1395, 07:18 صبح
متد رو به صورت بازگشتی هم میتونید بنویسید
public static void ResetAllControls(Control form)
{
foreach (Control control in form.Controls)
{
//.......

if (control.HasChildren)
{
ResetAllControls(control);
}
}
}
روشی به غیر از بازگشتی هست که بتونه داخل کنترل های GroupBox رو هم خالی کنه؟

bmvgod
شنبه 17 مهر 1395, 07:39 صبح
متد رو به صورت بازگشتی هم میتونید بنویسید
public static void ResetAllControls(Control form)
{
foreach (Control control in form.Controls)
{
//.......

if (control.HasChildren)
{
ResetAllControls(control);
}
}
}

جواب میده،اما مشکل من اینه که چطوری باید توی فرمم فراخوانیش کنم؟
اسم فرمم FrmNew هست.

Mahmoud.Afrad
شنبه 17 مهر 1395, 15:10 عصر
جواب میده،اما مشکل من اینه که چطوری باید توی فرمم فراخوانیش کنم؟
اسم فرمم FrmNew هست.

اگر میخواهید روی فرم جاری عمل کنه، باید ارجاع فرم جاری (this) رو به عنوان آرگومان ارسال کنید.

bmvgod
یک شنبه 18 مهر 1395, 06:36 صبح
اگر میخواهید روی فرم جاری عمل کنه، باید ارجاع فرم جاری (this) رو به عنوان آرگومان ارسال کنید.

میشه لطف کنید دقیقاً راهنماییم کنید که چکار باید کنم؟
ممنون میشم

mr.sirwan
یک شنبه 18 مهر 1395, 10:35 صبح
میشه لطف کنید دقیقاً راهنماییم کنید که چکار باید کنم؟
ممنون میشم

دوست عزیز همونطور که ذکر شد، شما فقط لازمه که داخل ایونت کلیک یک دکمه، متدتون رو فراخوانی کنین، راهنمایی از این دقیق تر؟؟؟!!!

cClearTextBox.ResetAllControls(this);

bmvgod
دوشنبه 19 مهر 1395, 23:30 عصر
دوست عزیز همونطور که ذکر شد، شما فقط لازمه که داخل ایونت کلیک یک دکمه، متدتون رو فراخوانی کنین، راهنمایی از این دقیق تر؟؟؟!!!

cClearTextBox.ResetAllControls(this);






من دوتا GroupBox دارم که توشون چندین کنترل هست،یک Button خارج GroupBox گذاستم که کار پاک کردن کنترل ها رو انجام بده،ولی نمیدونم چرا جواب نمیده؟
حتی داخل Button داخل یک GroupBox هم این کد رو نوشتم جواب نمیده. :متفکر:
ولی همون کنترلها رو خارج GroupBox قرار میدم و همین کد رو پشت یک دکمه میگذارم،درست عمل میکنه
حالا چرا اینطوری می شه نمیدونم؟
بنظرتون دلیلش چی می تونه باشه؟

واقعاً بسیار ممنون از لطفتون که راهنماییم میکنید :خجالت:

mrprestige
سه شنبه 20 مهر 1395, 16:04 عصر
سلام دوست من ، عزاداری هاتون قبول ؛ خب دوست من مسلمه که جواب نده چون شما طبق این متدی که نوشتی ( طبق پست شماره یک (http://barnamenevis.org/showthread.php?530943-%D9%86%D8%B4%D9%86%D8%A7%D8%AE%D8%AA%D9%86-%DA%A9%D9%84%D9%85%D9%87-control&p=2343957&viewfull=1#post2343957) ) شما از کنترل Group box نامی نبردید فقط فرمدید تا زمانی که کنترل هایی از قبیل
List box , textbox,combobox,checkbox (بسته به پارامتر هر کنترل) ریست بشه . شما توی حلقه Foreach گفتید form.Controls یعنی کنترل های داخل فرم تون نه داخل Groupbox . امیدوارم تونسته باشم منظور رو رسونده باشم .

پیروز و موفق باشی

ژیار رحیمی
سه شنبه 20 مهر 1395, 23:11 عصر
private void ResetAllControls(Control.ControlCollection controlCollection)
{
if (controlCollection == null)
return;


foreach (var c in controlCollection.OfType<TextBox>())
c.Text = string.Empty;
foreach (var c in controlCollection.OfType<CheckBox>())
c.Checked = false;
foreach (var c in controlCollection.OfType<ComboBox>())
c.SelectedIndex = -1;
foreach (var c in controlCollection.OfType<ListBox>())
c.ClearSelected();
foreach (var item in controlCollection.OfType<GroupBox>().Where(item => item.HasChildren))
ResetAllControls(item.Controls);
foreach (var item in controlCollection.OfType<TabControl>().Where(item => item.HasChildren))
ResetAllControls(item.Controls);
foreach (var item in controlCollection.OfType<TabPage>().Where(item => item.HasChildren))
ResetAllControls(item.Controls);
}
private void button1_Click(object sender, EventArgs e)
{
ResetAllControls(this.Controls);
}