PDA

View Full Version : چگونه رنگ فرم parent را به رنگ ديگري تغيير دهيم ؟؟



Elmira1987
یک شنبه 09 خرداد 1389, 11:05 صبح
با سلام ...
من يه فرم دارم كه خاصيت IsMdicobntainer اون رو true كردم و پيش فرض رنگ بك گراندم به خاكستري تغيير كرده ...
چطورمي تونم رنگ بك گراند روتغيير بدم. كمكم كنيد

Ehsan.Saradar
یک شنبه 09 خرداد 1389, 11:16 صبح
کد زیر را در ایونت لود بنوسید :


foreach (Control control in this.Controls)
{

MdiClient client = control as MdiClient;
if (!(client == null))
{

client.BackColor = Color.White;

break;
}
}

Elmira1987
یک شنبه 09 خرداد 1389, 12:26 عصر
کد زیر را در ایونت لود بنوسید :


foreach (Control control in this.Controls)
{

MdiClient client = control as MdiClient;
if (!(client == null))
{

client.BackColor = Color.White;

break;
}
}


برادر:
اين رو نوشتم ولي اجرا نشد كه ...
يعني اصلا جواب نداد .
بابا اعصابمو منو ريخته بهم ، همش خاكستري مي شه يه دكمه رو هم كه ترنس پرنت كنم باز دورش خاكستري مي شه ؟؟؟؟؟ چيكار كنم ؟

gwbasic
یک شنبه 09 خرداد 1389, 13:37 عصر
باید از کلاس MdiClient استفاده کنی
در لینک زیر توضیحات کامل وجود داره...

http://support.microsoft.com/kb/319465

Elmira1987
دوشنبه 10 خرداد 1389, 09:15 صبح
باید از کلاس MdiClient استفاده کنی
در لینک زیر توضیحات کامل وجود داره...

http://support.microsoft.com/kb/319465


بابا نشد . من همين كار رو انجام دادم ولي باز نشد .ببينيد من يه فرم دارم كه پرنت شده حالا اگه يه تب كنترل بذارم ، تب نترلم خاكستري ميشه ؟

gwbasic
دوشنبه 10 خرداد 1389, 12:06 عصر
tab Control رو تو فرم parent گذاشتی؟ بیشتر توضیح بده...

exlord
دوشنبه 10 خرداد 1389, 12:35 عصر
private void MDIForm_Load(object sender, EventArgs e)
{
this.BackColor = Color.Red;
MdiClient ctlMDI;
foreach (Control ctl in this.Controls)
{
try
{
ctlMDI = (MdiClient)ctl;
ctlMDI.BackColor = this.BackColor;
}
catch (InvalidCastException exc)
{
// Catch and ignore the error if casting failed.
}
}

}

اَرژنگ
سه شنبه 11 خرداد 1389, 04:52 صبح
باید از کلاس MdiClient استفاده کنی
در لینک زیر توضیحات کامل وجود داره...

http://support.microsoft.com/kb/319465

در لینکی که فرستاده شد، چنین کدی وجود دارد:



catch (InvalidCastException exc)
{
// Catch and ignore the error if casting failed.
}


این نوع کد نویسی نشان ضعف و تازه کار بودن برنامه‌نویس و یا اینکه نداشتن دیسیپلین شخصی برایه طراحی کد بهتر است. استفاده از اینگونه کدها باید خودداری بشه.

باور نکردنی است که یک جایه معتبری مانند مایکراسفت استفاده از چنین کدی را تجویز میکنه!

اَرژنگ
سه شنبه 11 خرداد 1389, 05:21 صبح
private void MDIForm_Load(object sender, EventArgs e)
{
this.BackColor = Color.Red;
MdiClient ctlMDI;
foreach (Control ctl in this.Controls)
{
try
{
ctlMDI = (MdiClient)ctl;
ctlMDI.BackColor = this.BackColor;
}
catch (InvalidCastException exc)
{
// Catch and ignore the error if casting failed.
}
}

}


اصلاح شد:



privatevoid MDIForm_Load(object sender, EventArgs e)
{
this.BackColor = Color.Red;
MdiClient ctlMDI;
foreach (Control ctl inthis.Controls)
{
ctlMDI = ctl asMdiClient;
if (ctlMDI != null)
{
ctlMDI.BackColor = this.BackColor;
}
}
}

Elmira1987
سه شنبه 11 خرداد 1389, 10:20 صبح
دوستان
هيچكدومتون مشكله منو حل نكردين ...
آخه يكي از شما يا اين چيزي كه من ميگم كارنكرده .........
وقتي يه فرم رو ما ميايم پرنت مي كنيم . هر كنترلي رو اون بذاريم با transxparent كردنه اون به رنگ خاكستري تيره در مياد يعني همون رنگه فرم پيش فرض حالا چه ططور مي تونم تغييرش بدم . يه كم فك كنين بعد جواب بديد ...

اَرژنگ
سه شنبه 11 خرداد 1389, 10:40 صبح
دوستان
هيچكدومتون مشكله منو حل نكردين ...
آخه يكي از شما يا اين چيزي كه من ميگم كارنكرده .........
وقتي يه فرم رو ما ميايم پرنت مي كنيم . هر كنترلي رو اون بذاريم با transxparent كردنه اون به رنگ خاكستري تيره در مياد يعني همون رنگه فرم پيش فرض حالا چه ططور مي تونم تغييرش بدم . يه كم فك كنين بعد جواب بديد ...
مشکل اصلی شما چیه؟
عوض کردن رنگ فرم یا پرینت گرفتن از فرم؟
لطفاً نپرسید که روشی که به نظر شما راه حل است را چطوری میشه پیاده کرد، به جاش مشکل اصلی را توضیح بدید چکار میخواهید انجام بدید.
و خیر در ۱۵ سال برنامه نویسی هیچ وقت احتیاج به روشهایه اینطوری که شما لازم دارید نداشتم.

در هیچ جایه حرفه‌ای کسی فرم را پرینت نمیکنه، رپورت گرفتن روشهایه مختلف دارد، ولی تا حالا در هیچ برنامه‌درست و حسابی ندیدم که فرم پرینت گرفتن احتیاجی باشد.
ولی اگر نیاز واقعی پرینت گرفتن از فرم هست یکمی توضیح بدید که شرایط مشکلتان دستمان بیاد.

Elmira1987
سه شنبه 11 خرداد 1389, 12:03 عصر
داداشه من
پرينت نمي خوام بگيريم .



من يك فرم رو پرنت كردم يعني ismdiparenet=true كردم
كه بطور خودكار فرمم خاكستري تيره شد .

حالا يه عكس گذاشتم تو بك گرانده همون فرمم كه پرنت شده يعني فرم پدر.

حالا يه تب كنترل گذاشتم
وقتي اجرا مي كنم به خاطر اينكه فرمم خاكستريه بخاطر پدر شدن ، تب كنترلم نوار بالاش خاكستري مي شه ، كه اين در حالت اجرا به دليل بودن به عكس كه آبي رنگه جلوه ي بدي داره
متوجه شديد
امتحان كنيد

يه فرم بذاريد ismdiparent=true كنيد.
حالا يه عكس براي فرمتون انتخاب كنيد به عنوان پس زمينه
حالا يه تب كنترل بذاريد
حالا برنامه تون رو اجرا كنيد .

خواهي ديد كه اگر مثلا پس زمينه آبي باشه كه نوار خاكستري تيره مياد بالاش .
حالا سواله من
اينه
چيكار كنم كه اين خاكستري تيره يه رنگه ديگه شه .

odiseh
سه شنبه 11 خرداد 1389, 12:54 عصر
يه كار ميشه كرد و اون اينه كه Property مربوط به tab Control رو كه Appearance ناميده ميشه از حالت Normal ببريد به flatButtons.

با اينكار اون نوار خاكستري از بين ميره........ امتحان كن.

Elmira1987
سه شنبه 11 خرداد 1389, 13:13 عصر
يه كار ميشه كرد و اون اينه كه Property مربوط به tab Control رو كه Appearance ناميده ميشه از حالت Normal ببريد به flatButtons.

با اينكار اون نوار خاكستري از بين ميره........ امتحان كن.

آخه بحث سره اينه كه من كه تنها تب كنترل نمي ذ خوام بذارم چيزا ديگه هم مي خوام بذارم
مثلا يه دكمه دارم كه مي خوام يه عكس براش بذارم كه شكله دايره هستش حالا
دكمه شكله مستطيله پس جا هاي خاليه عكس شكله خاكستري رنگ مي شه .

اَرژنگ
چهارشنبه 12 خرداد 1389, 03:32 صبح
آخه بحث سره اينه كه من كه تنها تب كنترل نمي ذ خوام بذارم چيزا ديگه هم مي خوام بذارم
مثلا يه دكمه دارم كه مي خوام يه عكس براش بذارم كه شكله دايره هستش حالا
دكمه شكله مستطيله پس جا هاي خاليه عكس شكله خاكستري رنگ مي شه .

لطفاً یک پروژه کوچیک که مشکل شما را نشان بده بفرستید. به این شکل میتونیم دقیقاً با هم کار کنیم.

التماس دعا

gwbasic
چهارشنبه 12 خرداد 1389, 08:09 صبح
ساده ترین راه اینه که یه Panel توی فرم مادر بذاری و Dock اون رو Fill کنی بعد هرچی خواستی توی Panel بذاری با تغییر رنگ panel دیگه مشکلی ایجاد نمیشه

امیدوارم جوابتو گرفته باشی

ولی با نظر آرژنگ موفقم ، چرا باید توی فرم مادر این کارها رو انجام بدی
اساسا مفهوم MDI چی هست ؟ جز اینه که یه فرمی باشه که توی اون چند فرم دیگه باز بشه ...

پیدا کردن جواب برای یه راه غلط ممکنه که خیلی سخت باشه غیر از غیره منطقی بودن اون

Elmira1987
چهارشنبه 12 خرداد 1389, 08:31 صبح
ساده ترین راه اینه که یه Panel توی فرم مادر بذاری و Dock اون رو Fill کنی بعد هرچی خواستی توی Panel بذاری با تغییر رنگ panel دیگه مشکلی ایجاد نمیشه

امیدوارم جوابتو گرفته باشی

ولی با نظر آرژنگ موفقم ، چرا باید توی فرم مادر این کارها رو انجام بدی
اساسا مفهوم MDI چی هست ؟ جز اینه که یه فرمی باشه که توی اون چند فرم دیگه باز بشه ...

پیدا کردن جواب برای یه راه غلط ممکنه که خیلی سخت باشه غیر از غیره منطقی بودن اون

اين راه رو كه شما گفتي گذاشتن پنل رو خودم انجام دادم ، دنبال يه را منطقي مي گشتم .
خوب فرم من مادره ، ولي همين مادر فرمه اصلي من هستش . يعني شما ميگين من توي فرم مادر حتي چند تا دكمه براي باز شدن فرم هاي ديگه نذارم ؟؟؟؟؟

يعني راه حل منطقي دارين بگين من تازه كارم .... ممنووووونم پيشاپيش

adel89
یک شنبه 01 اسفند 1389, 07:17 صبح
می تونی یه Bitmap تعریف کنی بعد رنگ دلخواهتو بهش بدی بعد بذاریش BackGround Image فرم Parent

void MDIParent1_Paint(object sender, PaintEventArgs e)
{
Bitmap BMP = new Bitmap(this.Width, this.Height);
Graphics g = Graphics.FromImage(BMP);
g.FillRectangle(Brushes.Red, this.ClientRectangle);

this.BackgroundImage = BMP;
}

gerdioz
یک شنبه 01 اسفند 1389, 20:48 عصر
سلام من خودم ترجیحا در فرم والد عکس میزارم به شما هم اینو پیشنهاد میکنم
این یه نمونه از برنامه های منه