PDA

View Full Version : سوال: تغییر یک خاصیت برای کل تکست باکس ها با فعال شدن تیک چک باکس



mehrdad1991h
سه شنبه 19 مهر 1390, 17:47 عصر
سلام
اقا یه برنامه داریم توش مثلا 5 تا تب هست
حالا هر تب یه سری گروپ باکس هم داره
حالا مثلا همه تکست باکس هایی که داریم الان با کلیک موس هرچی تو کلیپبرد داریم را کپی میکنه تو تکست باکسی که روش کلیک شده
خوب الان میخوایم برای هر تب یه چک باکس بزاریم که تا تیکش را فعال میکنیم عملی کپی کردن کلیپ برد تو تکست باکسی که روش کلیک شده به عمل خالی کردن اون تکست باکس تبدیل بشه

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

لطفا کمک

pedramj
چهارشنبه 20 مهر 1390, 01:31 صبح
سلام
اگه تعداد زیادی می خوای استفاده کنی می تونی یه یوزر کنترل براش بنویسی که یه تکست باکش باشه با یه چک باکس کد ها رو اونجا بنویسی برا کلیپ برد بعد هم اونو اضافه کنی به فرم اصلیت

mehrdad1991h
چهارشنبه 20 مهر 1390, 10:13 صبح
راه حل دیگه ای نیس ؟

nunegandom
چهارشنبه 20 مهر 1390, 11:09 صبح
از وراثت استفاده کن! وراثت بلدی؟

wolf_majid
چهارشنبه 20 مهر 1390, 11:33 صبح
یک نمونه برات نوشتم
امیدوارم بتونی از توش راه حل رو پیدا کنی

mehrdad1991h
چهارشنبه 20 مهر 1390, 12:40 عصر
یک نمونه برات نوشتم
امیدوارم بتونی از توش راه حل رو پیدا کنی

من
VS2008 دارم این باز نمیشه باهاش میگه با ورژن جدید و....

wolf_majid
چهارشنبه 20 مهر 1390, 12:45 عصر
من
VS2008 دارم این باز نمیشه باهاش میگه با ورژن جدید و....

ok :اشتباه:

این هم کد مورد نظر :

namespace WindowsFormsApplication15
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
allTxt_Set(this);
}


/// <summary>
/// خالی کردن تمام جعبه متن های بر روی فرم
/// </summary>
/// <param name="ctr"></param>
private void allTxt_Set(System.Windows.Forms.Control ctr, bool clear = false)
{
foreach (System.Windows.Forms.Control ctrl in ctr.Controls)
{
if (ctrl is System.Windows.Forms.GroupBox || ctrl is System.Windows.Forms.Panel
|| ctrl is TabControl)
{
allTxt_Set(ctrl, clear);
}
//اگر خواستیم تکست باکس ها خالی شوند
if (clear)
{
if (ctrl is System.Windows.Forms.TextBox)
ctrl.Text = string.Empty;
}
else
{
if (ctrl is System.Windows.Forms.TextBox)
ctrl.Click += new EventHandler(allTxt_Click);
else if (ctrl is CheckBox)
{
(ctrl as CheckBox).Click += new EventHandler(allChkBox_Checked);
}

}
}
}

/*
private void allTxt_Undo(System.Windows.Forms.Control ctr)
{
foreach (System.Windows.Forms.Control ctrl in ctr.Controls)
{
if (ctrl is System.Windows.Forms.GroupBox || ctrl is System.Windows.Forms.Panel
|| ctrl is TabControl)
{
allTxt_Undo(ctrl);
}
if (ctrl is System.Windows.Forms.TextBox)
{
(ctrl as TextBox).Undo();
}
}
}
*/


/// <summary>
/// کپی کردن متن کلیپ بورددر تکست باکس کلیک شده
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void allTxt_Click(object sender, EventArgs e)
{
(sender as TextBox).Text = Clipboard.GetText();
}

/// <summary>
/// اگر چکس باکسی کلیک شود تمام جعبه متن ها خالی می شوند
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void allChkBox_Checked(object sender, EventArgs e)
{
if ((sender as CheckBox).Checked)
{
allTxt_Set((sender as CheckBox).Parent, true);
}
/*
else if (!((sender as CheckBox).Checked))
{
allTxt_Undo((sender as CheckBox).Parent);
}
*/
}




private void Form1_Load(object sender, EventArgs e)
{

}

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{

}


}
}

managment-barnamenevis
چهارشنبه 06 اسفند 1393, 00:54 صبح
با اجازه محمد آقا آشتیانی
خدا سوالم تکراری نیس
این یه سواله که هنوز جوابشو کامل پیدا نکردم
دیدم اینجام بحث همینه گفتم مطرح کنم. ببینم مشکلم حل میشه یا نه. تمام فرمایشات شما درست ، یکی به من بگه اگه چک باکسای ما توی یه گروپ باکس باشه بعد این گروپ باکس خودش تو یه پنل باشه بعد خود پنلم تو یه گروپ باکس دیگه باشه . چطوری باید پیاده ش کنم.:افسرده::افسرده:

golbafan
جمعه 08 اسفند 1393, 12:57 عصر
راه حل دوم:


private void button1_Click(object sender, EventArgs e)
{
foreach (Panel p in groupBox1.Controls)
{
foreach (GroupBox g in p.Controls)
{
foreach (CheckBox c in g.Controls)
{
if (c is CheckBox)
c.Checked = !c.Checked;
}
}
}
}

این هم برنامه کاملش:

managment-barnamenevis
جمعه 08 اسفند 1393, 14:16 عصر
سلام

من فایلی که گذاشتینو یه سری تغییرات دادم

ببینین الان چیکارش باید بکنیم


راه حل دوم:


private void button1_Click(object sender, EventArgs e)
{
foreach (Panel p in groupBox1.Controls)
{
foreach (GroupBox g in p.Controls)
{
foreach (CheckBox c in g.Controls)
{
if (c is CheckBox)
c.Checked = !c.Checked;
}
}
}
}

golbafan
جمعه 08 اسفند 1393, 14:24 عصر
خب دقیقا کجاش مد نظر هست؟
الان به همه چک باکس ها دسترسی دارید
هر کاری لارم دارید باهاشون بکنید
مثلا من خاصیت checked رو معکوس کردم : c.Checked = !c.Checked

golbafan
جمعه 08 اسفند 1393, 14:34 عصر
این کامل نیست ولی پست بعد کاملتره

golbafan
جمعه 08 اسفند 1393, 18:35 عصر
روش دیگه:


private void button1_Click(object sender, EventArgs e)
{
Dictionary<string, bool> checkBoxes = new Dictionary<string, bool>();
LoopControls(checkBoxes, this.Controls);
label1.Text = string.Join("\n", checkBoxes);
}


private void LoopControls(Dictionary<string, bool> checkBoxes, Control.ControlCollection controls)
{
foreach (Control control in controls)
{
if (control is CheckBox)
}
((CheckBox)control).Checked = true;
checkBoxes.Add(control.Name, ((CheckBox)control).Checked);
{
if (control.Controls.Count > 0)
LoopControls(checkBoxes, control.Controls);
}
}


فایل آخر که همه چک باکسها رو برون درنظر گرفتن اینکه کجان چک میکنه: