PDA

View Full Version : سوال: کمرنگ کردن فرم فرزند



javadaskari
جمعه 21 فروردین 1388, 20:04 عصر
سلام

دوستان خواهشا جواب بدبد.تا حالا چند بار پرسيدم؟

من يک فرم فرزند به همراه فرم MDI دارم حالا ميخوم خاصيت Opacity فرم فرزند 0.8 باشد.ولي کار نميکند.يعني به حالت معمولي کار ميکند ولي وقتي فرم فرزند فرم MDI شد ديگر کار نميکند.چرا؟

SMRAH1
چهارشنبه 02 اردیبهشت 1388, 23:28 عصر
سلام

توی MSDN نوشته که این کار امکان پذیر نیست یعنی :

The MDI child form you create in this step is a standard Windows Form. As such, it has an Opacity property, which enables you to control the transparency of the form. However, the Opacity property was designed for top-level windows. Do not use it with MDI child forms, as painting problems can occur.


--OR--


There are some behavior differences between MDI forms and single-document interface (SDI) windows in Windows Forms. The Opacity property does not affect the appearance of MDI child forms...


موفق باشی

rezatati
یک شنبه 06 اردیبهشت 1388, 00:14 صبح
خاصیت TopLevel فرم فرزند رو به False تغییر ش بده ببین درست میشه یا نه ولی فکر کنم که درست میشه

javadaskari
یک شنبه 06 اردیبهشت 1388, 10:31 صبح
دوست عزيز فرم خاصيت TopLevel نداشت ولي خاصيت TopMost داشت که آن هم درست نشد.يعني هيچ راهي نداره؟

rezatati
یک شنبه 06 اردیبهشت 1388, 23:55 عصر
چرا نداره حتما ازش یه نمونه نساختی اول ازش یک نمونه بساز بعد مثل کد زیر که من تو برنامه خودم استفاده کردم


Form1 mhfrm = new Form1();
mhfrm.TopLevel = false;

NewFoxStudent
دوشنبه 07 اردیبهشت 1388, 08:46 صبح
من هر راهی رو که به ذهنم رسید امتحان کردم حتی راههای غیر منطقی
همچین کاری امکان نداره مگر اینکه فرم پدر هم کمرنگ بشه در واقع فرم فرزند این خاصیت رو از فرم پدر به ارث میبره

شاید بشه با استفاده از API این کار رو کرد که متاسفانه من بلد نیستم

esmaeily-hosein
دوشنبه 07 اردیبهشت 1388, 13:35 عصر
شاید بشه با استفاده از API این کار رو کرد که متاسفانه من بلد نیستم
من Api هم تست کردم جواب نداد . مثلیکه microsoft با منطق خاصی این کارو انجام داده .
مثلیکه فقط تنها راه اون override کردن PaintBackground اگر خواستید نمونه اونو براتون بنویسم

javadaskari
چهارشنبه 09 اردیبهشت 1388, 08:12 صبح
بله لطفا برام بنويسيد.ازتون ممنون ميشم.

mohsen_csharp
سه شنبه 22 اردیبهشت 1388, 10:45 صبح
عزیز من وقتی microsoft میگه نمیشه یعنی نمیشه دیگه

NewFoxStudent
سه شنبه 22 اردیبهشت 1388, 11:26 صبح
من خیلی تحقیق کردم
تقریباً مطمئنم هیچ راهی نداره

وحید پیرمرادیان
سه شنبه 22 اردیبهشت 1388, 23:12 عصر
دوست عزیز.

ببین سورس زیر کمکت می کنه.

Coward
چهارشنبه 23 اردیبهشت 1388, 10:11 صبح
فکر کنم مشکلت با WPFحل بشه

esmaeily-hosein
چهارشنبه 23 اردیبهشت 1388, 11:56 صبح
تنها راهش اینه که تصویر پنجره پشت را برداشته و در فرم خودمان آن را رسم کنیم بدی این روش کند بودن آن هنگام Resize یا تغییر مکان میباشد وقت کردن حتما برات نمونش مینویسم .

esmaeily-hosein
چهارشنبه 23 اردیبهشت 1388, 12:43 عصر
کد فرم Child


public class OpacityChildForm : Form
{
public OpacityChildForm()
{
Controls.Add(new Button());
}

private int opacity;
public new int Opacity
{
get { return opacity; }
set
{
opacity = value;
this.InvalidateEx();
}
}

protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020;//WS_EX_TRANSPARENT
return cp;
}
}

protected override void OnPaintBackground(PaintEventArgs e)
{
Color bk = Color.FromArgb(Opacity, this.BackColor);
e.Graphics.FillRectangle(new SolidBrush(bk), e.ClipRectangle);
}

public void InvalidateEx()
{
if (Parent == null) return;

Rectangle rc = new Rectangle(this.Location, this.Size);
Parent.Invalidate(rc, true);
}

}//end class



کد هنگام نماش فرم :



OpacityChildForm ocf = new OpacityChildForm { Opacity = 80, TopLevel = false };

this.Controls.Add(ocf);

ocf.LocationChanged += (object s, EventArgs ea) =>
{
((OpacityChildForm)s).InvalidateEx();
};

ocf.Show();
ocf.InvalidateEx();



این کد بعد از کلی مشاهده کدهای مختلف نوشتم چیز بدی نشد البته خالی از اشکال هم نیست ولی در کل خوب کار میکنه .

esmaeily-hosein
چهارشنبه 30 اردیبهشت 1388, 17:37 عصر
مشکل این دوستمون حل شد مثلیکه جایزه هم گم گور شد!.

javadaskari
چهارشنبه 06 خرداد 1388, 23:53 عصر
دوستان جايزه گم و گور نشده.من هنوز جوابم را نگرفتم.کدهايي که دوستان داده اند هيچکدام به درد نميخورند.
مثل اينکه اين يکي از محدوديت هاي C# است.با اين حال من سر حرفم هستم.

esmaeily-hosein
پنج شنبه 07 خرداد 1388, 16:25 عصر
میشه بگی مشکل کد بالا چیه . در ضمن این مشکل C# نیست محدودیتی است که ویندوز با اطلاع قبلی انجام داده است .

mahboube
دوشنبه 10 آبان 1389, 10:22 صبح
دوستان منم اين مشكل رو دارم؟به نظرتون راهي داره؟؟!!