تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيف يتم فتح نافذة جديدة أو فورم ؟
#1
Question 
السلام عليكم ورحمة الله وبركاته
قمت بإضافة نافذة باسم Window1 وأريد عند النقر على الزر الموجود في النافذة الرئيسية أن يتم إظهار هذه النافذة
كذلك قمت بإضافة فورم باسم Form1 وأريد عند النقر على الزر الموجود في النافذة الرئيسية أن يتم إظهار الفورم
سابقاً كنا نكتب هذا الكود Form1.Show فيتم الفتح لكن لم تنجح مع WPF
الملف في المرفقات وشاكر مساعدتكم

لدي سؤال آخر :
لاحظت أن الحفظ يتم تلقائياً وأنا لا أريد ذلك
فما هو الخيار الذي يجب تعديله حتى لا يقوم الفيجوال ستديو بالحفظ تلقائياً ؟
شكراً لكم


الملفات المرفقة
.rar   WpfApplication1.rar (الحجم : 81.68 ك ب / التحميلات : 64)
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#2
السلام عليكم
بالنسبة لتشغيل Window من الكود فاستعمل الكود الاتي
كود :
Dim window As New Window1()
window.Show()
اما بالنسبة لتشغيل Form من الكود فنفس الحالة اي :
كود :
Dim _Form As New Form1()
_Form.Show()
لكن نصيحة لا تستخدم Form في WPF و استعمل Window فهي افضل
اما اذا احتجت لتشغيل احد ادوات Windows Forms فيفضل استعمال Windows Forms Host
و هي اداة سهلة و خفيفة و تعطيك امكانية عالية حيث انك يمكن ان تستعمل Windows Forms و Wpf في نفس الوقت مما يعطيك امكانات كبيرة
و بالنسبة للمثال الذي وضعته فقد عدلت عليه قليلا وهو موجود في المرفقات


الملفات المرفقة
.zip   WpfApplication1.zip (الحجم : 98.46 ك ب / التحميلات : 88)
الرد }}}
تم الشكر بواسطة:
#3
وعليكم السلام ورحمة الله وبركاته
ألف شكر لك أخي الكريم على ردك المميز
لكن شعرت وأن الأمور أصبحت معقدة فلماذا تعريف المتغير ولماذا كل هذه اللفة والدورة ؟

لدي سؤال بخصوص الكود :
لاحظت أن الكود يقوم بإظهار النافذة أكثر من مرة ، يعني لو نقرت على الزر سيفتح النافذة ولو نقرت مرة أخرى سيفتح نفس النافذة مرة ثانية ، وهكذا دواليك ..
أنا أريد أنه يفتح النافذة مرة واحدة فقط وبدون أن تصبح النافذة في المقدمة ، يعني يفتح النافذة ويبقى بإمكاني العودة للنافذة الرئيسية ؟


سؤال آخر :
كيف يتم استعمال Windows Forms Host ؟ هل لك أن تشرح لنا ذلك ؟
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#4
أضف ملاحظة أخرى على كود إظهار النافذة الذي وضعته حضرتك
لو قمت بتركيز النافذة للوسط أي وسط النافذة الرئيسية فعند استدعاءها بالكود الذي وضعته حضرتك لن تظهر وسط النافذة الرئيسية التي تم الاستدعاء من خلالها ..

نحن بانتظار الأخوة للإجابة على هذا التساؤل والتساؤلات الأخرى الموجودة في المشاركة
تحياتي لكم
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#5
السلام عليكم ورحمة الله وبركاته




اولا : الغاء حفظ المشاريع تلقائيا

اتبع الصور :














ثانيا : ظهور الWindow في منتصف الWindow المستدعي


اولا : عليك بتعيين خاصية WindowStartupLocation بقيمة "CenterOwner" للWindow المراد ظهوره في منتصف الWindow المستدعي (سواء في صندوق الخصائص او بالكود كما في الاسفل)

ثانيا : في الCode-Behind وعند الاستدعاء نقوم بجعل الخاصية Owner تشير للWindow الذي سيقوم باستدعاء الواجهة -فقط اضافة بسيطة في كود الاخ japan :-

PHP كود :
Dim window As New Window1()
window.WindowStartupLocation System.Windows.WindowStartupLocation.CenterOwner
window
.Owner Me
window
.Show() 









ثالثا : ظهور النافذة لأكثر من مرة


لا اعلم ربما تكون جديد على الدوت نت ولكن الامر واضع جدا وهي الكلمة New التي تقوم بإنشاء Instance للWindow ، لذلك عليك بإنشاء المتغير خارج الsub

PHP كود :
Window1 wnd = new Window1();

        private 
void Button_Click(object senderRoutedEventArgs e)
        {
            
wnd.Owner this;
            
wnd.ShowDialog();
        } 

وبتالي مهما ضغطت على الزر ستظهر نفس النافذة ولن يتم انشاءها مرة اخرى









رابعا : بالنسبة ل Windows forms host

انا لم استعملها شخصيا ولا اضن اني راح استعملها / لاني انتقلت ل WPF بغرض انشاء تصماميم لا محدودة
اما طريقة الاستخدام فهي بسيطة ، قم باضافتها من صندوق الادوات ثم اسحب اداة تابعة للWinForm
وافلتها داخلها

الرد }}}
تم الشكر بواسطة: السندبااد
#6
وعليكم السلام ورحمة الله وبركاته
جزاك الله خيراً أستاذنا الحبيب (الشاكي لله) ، وبعد :
1- بالنسبة للحفظ التلقائي : تم وشكراً لك.

2- بالنسبة لظهور النافذة : تمام ولكن لماذا الأمور معقدة بهذا الشكل ؟
لماذا لا يكفي أن نكتب window.Show وكفى ؟

3- بالنسبة لظهور أكثر من نافذة :
الأمر ShowDialog يظهر نافذة واحدة ولكنه يمنعك من العودة للنافذة الرئيسية إلا بعد غلق النافذة التي فتحتها عن طريق هذا الأمر
إذا أردنا أن يسمح لنا بالعودة للنافذة الرئيسية أظن أنه يمكن الاستفادة من الأمر Show
ولكن يجب وضع حيلة كمتغير مثلاً نضع له قيمة عند تشغيل النافذة وهذه القيمة تتغير عند غلقها
مثلاً في مديول وضعت هذا المتغير العام :
كود :
Public WinEnb As Boolean

عند إقلاع النافذة الرئيسية جعلت قيمته هكذا :
كود :
WinEnb = True

وعند النقر على زر فتح النافذة الثانية وضعت هذا الكود :
كود :
Dim dialogBox As New Window1()
        If WinEnb = True Then
            dialogBox.Show()
            WinEnb = False
        End If
الآن في حدث إغلاق النافذة الثانية وضعت هذه القيمة :
كود :
WinEnb = True

4- بالنسبة للـ Windows forms host : لم أفهم ما فائدتها إذا كانت كل أدوات Windows forms متوفرة في WPF ؟

ألف شكر لك أستاذنا الحبيب
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#7
إقتباس :- بالنسبة لظهور النافذة : تمام ولكن لماذا الأمور معقدة بهذا الشكل ؟
لماذا لا يكفي أن نكتب window.Show وكفى ؟


WPF تتبع طريقة السي شارب في ادارة الذاكرة والObject

في WinForm ومع vb.net تستطيع الوصول للform بسهولة كما ذكرت (Form1.Show)

السبب في ذلك هو ان vb.net تقوم بانشاء Instance للForm في الذاكرة لذلك يصبح الفورم جاهزا للتعامل الفوري


ولكن هذه الطريقة تتعب البرنامج جدا فما بالك ببرنامج كبير ب WPF !!! سيصبح البرنامج ابطأ من السلحفاة ..


تم مناقشة هذا الموضوع في هذا الرابط ، ارجوا الاطلاع عليه : هنا
الرد }}}
تم الشكر بواسطة: السندبااد
#8
اخي الحبيب الشاكي لله :
كفيت ووفيت جزاك الله خيراً وبارك بك وبعلمك
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: الشاكي لله
#9
السلام عليكم ورحمة الله وبركاته
حاولت جعل النافذة الرئيسية MainWindow نافذة MDI بحيث تحتضن بقية النوافذ
لكن لم أجد في الخصائص أي شيء له علاقة بالـ MDI فهل لكم أن ترشدونا أيها الأحباب للطريقة ؟
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#10
في WPF (افتراضيا) لايوجد هناك مفهوم "الواجهة متعددة المستندات"

إقتباس :WPF has no concept of MDI applications.


لكن توجد مكتبة تقوم بذلك
https://wpfmdi.codeplex.com/




لكن ان اردت رايي الشخصي ..

ارى ان الواجهات المعاصرة امثال واجهات windows 8 والميترو لاتعتمد على هذا النوع من الواجهات

فقد صارت تعتمد كثيرا على الtab control او الdockable window

وانا شخصيا احب الواجهات المعاصرة لذلك ابتعد عن mdi
الرد }}}
تم الشكر بواسطة: السندبااد


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] تشغيل دالة بنافذة الاب عند إغلاق نافذة الابن عبد الله 7 4,137 13-10-15, 10:53 PM
آخر رد: عبد الله

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم