PDA

View Full Version : آموزش: چگونه پروژه ویندوز فرم خود را در وب بروزر و روی سرور ویندوزی اجرا بگیریم !!!



MehdiElexal
یک شنبه 15 شهریور 1394, 12:05 عصر
تا حالا شده برنامه ای تحت ویندوز نوشته باشین و بخواین که این برنامه بدون هیچ گونه تغییری در اون به همون شکل داخل بروزر های مختلف نمایش داده شود؟
در این صورت شما قادر خواهین بود که برنامه نوشته شده خودتون رو به صورت سایت در بیارین و به این صورت نمایش بدین با داشتن کمترین دانش برنامه نویسی در مورد وب نویسی


برای شروع یک برنامه WinForm ساده پیاده سازی کنین و بعد از تست عملکردش وقتی مطمئن شدین که برنامه به طور کامل کار میکنه کار اصلی ما شروع میشه.


بعد از ایجاد برنامه وارد صفحه تنظیمات پروژه خودتون توی ویژوال استودیو بشین و Output Type رو روی ClassLibrary قرار بدین و از برنامه کامپایل بگیرین. در این صورت کل برنامه نوشته شده شما به صورت فایل کتابخانه ای آماده میشه


قدم بعدی کار اصلی ما رو شامل میشه. برای این منظور از VS یک پروژه جدید از نوع Wpf Browser Application ایجاد کنین. داخل Solution Explorer روی References کلیک راست کنین و گزینه Add reference رو انتخاب کنین و فایل کتابخانه ای ساخته شده در مرحله قبل رو به این پروژه اضافه کنین. بعد از اضافه کردن فایل قبلی نیاز داریم تا 2 فایل کتابخانه ای زیر رو هم اضافه کنیم :
Windows Forms Integration و System Windows Forms


خوب حالا نوبت کار اصلی ما میرسه و اون آماده سازی فرم نمایشی هستش. اینجا برای سادگی کار از StackPanel استفاده میکنیم که نمونه کدش میشه مسه زیر(البته این کد رو باید توی فرم اصلی مربوط به این پروژه قرار بدیم)




<Grid>
<StackPanel Margin="0,0,0,0" Name="stackPanel"
HorizontalAlignment="Left" VerticalAlignment="Top" />
</Grid>



خوب در قدم بعدی باید بریم توی قسمت کد زنی معمولی
من اینجا فقط کد ها رو میزارم چون بقیش خیلی سادس:

using System.Windows.Controls;
using System.Windows.Forms.Integration;
using WinFormProject;




namespace NewProject1
{


public partial class Page1 : Page
{
private readonly MainForm mainForm = new MainForm();//این شی از فایل WinFormProject ایجاد شده است




public Page1()
{
InitializeComponent();




//Create a Windows Forms Host to host a form
WindowsFormsHost windowsFormsHost = new WindowsFormsHost();


stackPanel.Width = mainForm.Width;
stackPanel.Height = mainForm.Height;
windowsFormsHost.Width = mainForm.Width;
windowsFormsHost.Height = mainForm.Height;


mainForm.TopLevel = false;




windowsFormsHost.Child = mainForm;




stackPanel.Children.Add(windowsFormsHost);
}
}
}

و اما آخرین قدم در اجرای این کار ها:


وارد Properties مربوط به پروژه جدید میشیم و میریم توی تب Security و اونجا گزینه This is a full trust application رو انتخاب میکنیم .


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

محمد رضا فاتحی
یک شنبه 15 شهریور 1394, 12:31 عصر
سلام...کسی امتحان کرده ببینه کار می کنه یا نه؟؟من که موفق نشدم

hamid_hr
یک شنبه 15 شهریور 1394, 13:42 عصر
منم تست کردم ولی موفق به اجرای درست نشدم

MehdiElexal
یک شنبه 15 شهریور 1394, 13:46 عصر
من تست کردم ، مشکلی نداشت
برنامه معمولی نبود
یه برنامه با 4 فرم و اتصال به SQLServer که دیتابیس از روی سیستم دیگه میخوند
کجاش مشکل داشتید ؟
نمونه اجرا روی کروم ....
135024

HAMRAHSOFT.IR
دوشنبه 16 شهریور 1394, 07:56 صبح
دوست خوب در Visual Studio 2015 چطوری ایجاد کنیم؟

MehdiElexal
دوشنبه 16 شهریور 1394, 14:22 عصر
2015 تست نزدم ، بنده با 2013 تست زدم اوکی بود

ژیار رحیمی
دوشنبه 16 شهریور 1394, 16:09 عصر
منم تست کردم خروجی نداد

pbm_soy
دوشنبه 16 شهریور 1394, 16:35 عصر
کارهایی که انجام شده منطقی میاد و قاعدتا کار خواهد کرد ولی هدف از اینکار چیست؟ آیا این پروژه را در وب سرور بگذاریم کار خواهد کرد؟

چون در پروژه های asp .net میتوان با اضافه کردن reference مربوط به system.windows.forms میتوان از ابزارهای windows form مانند message box و کامپوننتها و ابزارهای فرمهای ویندوز میتوان استفاده کرد و پروژه وب در حالت لوکلا بدون مشکل کار خواهد کرد ولی وقتی بروی یک وب سرور آپلود کنیم بخشهای ویندوز فرم کار نمیکنند!

reza_ali202000
سه شنبه 17 شهریور 1394, 00:22 صبح
سلام
بنده روی هاست تست کردم جواب نمیده. روی کلاینت خوب جواب میده.

MehdiElexal
سه شنبه 17 شهریور 1394, 11:05 صبح
متاسفانه بنده هاست ویندوزی ندارم تست بزنم ، ولی لوکال مشکلی نداشت , عکس نمونه هم گذاشتم ...

محمد رضا فاتحی
سه شنبه 17 شهریور 1394, 11:11 صبح
میشه لطف کنید یه پروژه تست با یه فرم ساده بزارین؟

MehdiElexal
سه شنبه 17 شهریور 1394, 12:41 عصر
اینم عکس از برنامه ساده !

135096



اینم سورس نمونه

using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;


using System.Windows.Controls;
using System.Windows.Forms.Integration;
using System.Windows.Forms;




namespace WpfBrowserApplication1
{
/// <summary>
/// Interaction logic for Page1.xaml
/// </summary>
public partial class Page1 : Page
{


//private readonly MainForm mainForm = new MainForm();//این شی از فایل WinFormProject ایجاد شده است
//private readonly ESECo_Manager.frmLogin MainForm = new ESECo_Manager.frmLogin();
private readonly WindowsFormsApplication1.Form1 frm = new WindowsFormsApplication1.Form1();
public Page1()
{
InitializeComponent();


//Create a Windows Forms Host to host a form
WindowsFormsHost windowsFormsHost = new WindowsFormsHost();


stackPanel.Width = frm.Width;
stackPanel.Height = frm.Height;
windowsFormsHost.Width = frm.Width;
windowsFormsHost.Height = frm.Height;


frm.TopLevel = false;




windowsFormsHost.Child = frm;




stackPanel.Children.Add(windowsFormsHost);
}
}
}





این هم قسمت XAML



<Page x:Class="WpfBrowserApplication1.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Title="Page1">
<Grid>

<StackPanel Margin="0,0,0,0" Name="stackPanel"
HorizontalAlignment="Left" VerticalAlignment="Top" />

</Grid>
</Page>

محمد رضا فاتحی
سه شنبه 17 شهریور 1394, 12:44 عصر
چه جالب...اجرا نشد
وقتی اجرا می کنم مرورگرم اجرا میشه می خواد یه فایل رو دانلود کنه که همون فایل برنامس!!!

MehdiElexal
سه شنبه 17 شهریور 1394, 12:46 عصر
چه جالب...اجرا نشد
وقتی اجرا می کنم مرورگرم اجرا میشه می خواد یه فایل رو دانلود کنه که همون فایل برنامس!!!
حتما مرورگر شما تو لود مشکل دااره که بصورت دانلود فایل رو بهتون میده ، چون دوستان دیگه هم اجرا گرفتن ....
مطمئنی تمام مراحل رو درست انجام دادی ؟ یه چک دیگه بکن بنظرم

ژیار رحیمی
چهارشنبه 18 شهریور 1394, 14:34 عصر
دوستان خروجی رو با Internet explorer بگیرید. با سایر مرورگرها میره به حالت دانلود