PDA

View Full Version : قفل کردن کنترل GroupBox



babak23
شنبه 03 آذر 1386, 09:41 صبح
چطور میشه کاری کرد که کاربر نتونه محتوییات groupBox را تغییر دهد؟
یک راه به این صورت هست groupBox.enable=false اما این دستور باعث میشه groupBox مات بشه . ( من میخوام groupBox مات نشه )

چطور میشه کاری کرد که کاربر نتونه محتوییات کنترل را تغییر بده بدون اینکه شکل و ظاهر کنترل تغییر کنه؟

dr_csharp
شنبه 03 آذر 1386, 09:59 صبح
چطور میشه کاری کرد که کاربر نتونه محتوییات groupBox را تغییر دهد؟
یک راه به این صورت هست groupBox.enable=false اما این دستور باعث میشه groupBox مات بشه . ( من میخوام groupBox مات نشه )

چطور میشه کاری کرد که کاربر نتونه محتوییات کنترل را تغییر بده بدون اینکه شکل و ظاهر کنترل تغییر کنه؟

اگر بگین محتویات GroupBox چی هست ( منظور اینکه چه کنترلهایی دارین ) بهتر میشه کمک کرد !

babak23
شنبه 03 آذر 1386, 10:51 صبح
اگر بگین محتویات GroupBox چی هست ( منظور اینکه چه کنترلهایی دارین ) بهتر میشه کمک کرد !
فکر نکنم این به اصل موضوع ربطی داشته باشه. شما فرض کن محتویات GroupBox ترکیبی از
دکمه های رادیویی و چک باکس باشه.
بهترین راه اینه که enable GroupBox را false کنیم اما ظاهر GroupBox تغییر میکنه و مات و بی رنگ میشه من میخوام این مورد ( مات و ببی رنگ شدن ) GroupBox برطرف بشه.

mohammadkhan
شنبه 03 آذر 1386, 11:55 صبح
شما اصل موضوع رو نقض کردین
اگه قراره توی برنامتون گروپ باکس بزارین با چند تا کنترل داخل اون و کاربر هم نتونه و یا نخواد تغییرشون بده پس چه لزومی به گزاشتن اونها توی برنامه است ؟؟؟

ولی من روش فکر کردم. به نتیجه قطعی نرسیدم چون کنترلهای درون گروپ باکس عضوی از خود گروپ باکس میشن و وقتی خاصیت enable یا visible گروپ باکس را false کنیم کنترلهای داخلی هم تحت تاثیر قرار میگیرن.

ir_programmer
شنبه 03 آذر 1386, 13:16 عصر
دوست عزیزمون هیچ مطلبی رو نقض نکردن.
سوالشون اینه:
چطور میشه یک groupbox رو به صورت ReadOnly کرد ولی کنترل های درون اون خاکستری نشن.
چون وقتی خاکستری میشن خوانایی اون پایین میاد. در بحث User Friendly برنامه های این مسئله مهم میشه.

sinpin
شنبه 03 آذر 1386, 19:50 عصر
چطور میشه کاری کرد که کاربر نتونه محتوییات groupBox را تغییر دهد؟
یک راه به این صورت هست groupBox.enable=false اما این دستور باعث میشه groupBox مات بشه . ( من میخوام groupBox مات نشه )

چطور میشه کاری کرد که کاربر نتونه محتوییات کنترل را تغییر بده بدون اینکه شکل و ظاهر کنترل تغییر کنه؟


http://www.codeproject.com/cs/miscctrl/grouper/grouperscreenshot.jpg (http://www.codeproject.com/cs/miscctrl/grouper.asp)

http://www.codeproject.com/cs/miscctrl/grouper.asp



قبل از اینکه دوستان تذکر بدهند بگم که :
- ویرایش شد : من تست نکرده بودم و فکر میکردم کد بالا نظر دوستمون رو برآورده کنه. اما ظاهرا مشکل کماکان باقیست. اما از طرفی چون کد خوبیه این پست رو به جای پاک کردن ویرایش کردم -

babak23
یک شنبه 04 آذر 1386, 08:57 صبح
دوست عزیزمون هیچ مطلبی رو نقض نکردن.
سوالشون اینه:
چطور میشه یک groupbox رو به صورت ReadOnly کرد ولی کنترل های درون اون خاکستری نشن.
چون وقتی خاکستری میشن خوانایی اون پایین میاد. در بحث User Friendly برنامه های این مسئله مهم میشه.

دقیقا همین مورد منظورم بود هنگامی که میخواستم یک برنامه را تحویل بدم مواردی به من گفته شد که به ظاهر پیش و پا افتاده بود یکی مورد بالاست و دیگری بزرگ کردن فونت messagebox بود و مواری دیگه که به بحث User Friendly بر میگشت.
آیا در سی شارپ دستوری وجود نداره که بشه همچنیین کاری انجام داد؟

ir_programmer
یک شنبه 04 آذر 1386, 14:04 عصر
این مشکل رو منم تو برنامه هام دارم.
البته نمی خوام از روش های غیر استاندارد مثل نوشتن کد رویدادهای OnChange یا امثال اون استفاده کنم.
چه روشی برای ReadOnly کردن بدون خاکستری شدن کنترل ها وجود داره که استاندارد هم باشه؟

babak23
دوشنبه 05 آذر 1386, 10:24 صبح
کسی نظر خاص نداره ؟ اساتید در این زمینه یاری کنند

ir_programmer
سه شنبه 06 آذر 1386, 13:38 عصر
این مشکل هنوز پا برجاست!

ir_programmer
پنج شنبه 08 آذر 1386, 07:42 صبح
راه حل در VB.
فقط باید تبدیل کنید.
http://barnamenevis.org/forum/showthread.php?p=427210#post427210

rasool nasr
پنج شنبه 08 آذر 1386, 09:02 صبح
بنده برای رفع این مشکل کنترل های داخل گروپ را (ReadOnly) می کنم .

ir_programmer
پنج شنبه 08 آذر 1386, 09:16 صبح
بنده برای رفع این مشکل کنترل های داخل گروپ را (ReadOnly) می کنم .

اشتباه نکنید. شما وقتی Read Only می کنید خاکستری رنگ میشن. راه حل رو نگاه کنید متوجه میشین.

babak23
پنج شنبه 08 آذر 1386, 10:56 صبح
این تبدیل شده ی کد مورد نظر است من این کد را در کجای سی شارپ باید استفاده کنم؟


publicclassVisualTextbox : TextBox
{
public VisualTextbox()
: base()
{
// Initialise the class
}
publicnewbool Enabled
{
get { returnbase.Enabled; }
set
{
SetDrawingStyle(!value);
// Set the underlying value
base.Enabled = value;
}
}
privatevoid SetDrawingStyle(bool customPaint)
{
// Switch draw styles if disabled
this.SetStyle(ControlStyles.UserPaint, customPaint);
}
protectedoverridevoid OnPaint(System.Windows.Forms.PaintEventArgs e)
{
base.OnPaint(e);
// Draw the bg in
e.Graphics.FillRectangle(newSolidBrush(Color.Gold) , this.ClientRectangle);
// Draw the appropriate text in using the fore color
e.Graphics.DrawString(this.Text, this.Font, newSolidBrush(this.ForeColor), -1, 1);
}
protectedoverridevoid OnEnabledChanged(System.EventArgs e)
{
base.OnEnabledChanged(e);
SetDrawingStyle(!this.Enabled);
this.Refresh();
}
}

در این کد رنگ تکست باکس عوض میشه و به صورت طلایی در مییاد یعنی در حقیقت موقعی که یک تکست باکس را غیر فعال میکنیم بجای اینکه به رنگ خاکستری در بیاد به رنگ طلایی در میاد.

ir_programmer
پنج شنبه 08 آذر 1386, 11:01 صبح
این تبدیل شده ی کد مورد نظر است من این کد را در کجای سی شارپ باید استفاده کنم؟


publicclassVisualTextbox : TextBox
{
public VisualTextbox()
: base()
{
// Initialise the class
}
publicnewbool Enabled
{
get { returnbase.Enabled; }
set
{
SetDrawingStyle(!value);
// Set the underlying value
base.Enabled = value;
}
}
privatevoid SetDrawingStyle(bool customPaint)
{
// Switch draw styles if disabled
this.SetStyle(ControlStyles.UserPaint, customPaint);
}
protectedoverridevoid OnPaint(System.Windows.Forms.PaintEventArgs e)
{
base.OnPaint(e);
// Draw the bg in
e.Graphics.FillRectangle(newSolidBrush(Color.Gold) , this.ClientRectangle);
// Draw the appropriate text in using the fore color
e.Graphics.DrawString(this.Text, this.Font, newSolidBrush(this.ForeColor), -1, 1);
}
protectedoverridevoid OnEnabledChanged(System.EventArgs e)
{
base.OnEnabledChanged(e);
SetDrawingStyle(!this.Enabled);
this.Refresh();
}
}

در این کد رنگ تکست باکس عوض میشه و به صورت طلایی در مییاد یعنی در حقیقت موقعی که یک تکست باکس را غیر فعال میکنیم بجای اینکه به رنگ خاکستری در بیاد به رنگ طلایی در میاد.

این کد رو در یک کلاس استفاده کنید.
و کنترل های textBox تون رو از جنس این کلاس تعریف کنید.

babak23
پنج شنبه 08 آذر 1386, 13:22 عصر
و کنترل های textBox تون رو از جنس این کلاس تعریف کنید.

میتونی در این مورد یک مثال بزنی
من وقتی یک تکست باکس میسازم با این کد مشکلی ندارم
مثل این مورد


VisualTextbox tx = newVisualTextbox();
tx.Location = newPoint(391,235);
tx.Size = newSize(100, 10);
tx.Name = "tx";
this.Controls.Add(tx);


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

فکر نکنم این مورد برای کنترل های دیگه جواب بده ؟ برای کنترل های دیگه مثل groupbox , radiobuttm و .. چی؟
این مدلی برای هر کدوم از این کنترل ها باید یک کلاس بسازیم راه حل ساده تر وجود نداره در مورد groupbox میتونی یک مثال بزنی؟