PDA

View Full Version : ایمپورت کردن فرم جدا طراحی شده در یک برنامه در حال اجرا در ویندوز فرم C#‎



Hossein_C#_sabz
سه شنبه 11 شهریور 1399, 15:15 عصر
باسلام. یک برنامه ای دارم مینویسم با ویندوز فرم سی شارپ به صورت برنامه اصلی و مادر که قرار است در آینده یکسری فرم هایی که طراحی میکنم را در حالت اجرا به اون برنامه اضافه کنیم. میخواستم ببینم کسی این کار را کرده و آیا میشه مثلا بعد طراحی یک فرم اون رو به صورت فایل xml در آورد و بعد توسط برنامه اصلی اونو ایپورت کرد و فرم را برای همیشه به اون برنامه اضافه کرد.
تقریبا مثل اینکه تو ورد یا هر برنامه template داره و قالب آماده اضافه میشه یا توی اکسز جدول ایمپورت می کنیم. متشکر

the king
چهارشنبه 12 شهریور 1399, 02:46 صبح
باسلام. یک برنامه ای دارم مینویسم با ویندوز فرم سی شارپ به صورت برنامه اصلی و مادر که قرار است در آینده یکسری فرم هایی که طراحی میکنم را در حالت اجرا به اون برنامه اضافه کنیم. میخواستم ببینم کسی این کار را کرده و آیا میشه مثلا بعد طراحی یک فرم اون رو به صورت فایل xml در آورد و بعد توسط برنامه اصلی اونو ایپورت کرد و فرم را برای همیشه به اون برنامه اضافه کرد.
تقریبا مثل اینکه تو ورد یا هر برنامه template داره و قالب آماده اضافه میشه یا توی اکسز جدول ایمپورت می کنیم. متشکر

راه حل های متفاوتی هست، من صرفا چند موردش رو پیشنهاد می کنم.

یک حالت اینه که شما نمی خواهید بجز پروژه اصلی پروژه متفاوتی باشه، یک پروژه اصلی دارید که خروجی اش فایل اجرایی Windows Forms است و فرم هایی که قبلا در پروژه های دیگری ساخته اید رو با ...Project > Add Existing Item به پروژه اضافه می کنید، با در نظر گرفتن اینکه موقع Add کردن فایل هایی که از جای دیگری انتخاب می کنید، بجای دکمه Add از دکمه Add As Link استفاده می کنید تا بجای یک کپی ازش به همون فایل اصلی ارجاع داده بشه. اینطوری اگر تغییری هم در فرم دادید، در همه پروژه هایی که اون فرم رو استفاده کردند تاثیر میذاره. البته اگر خواستید اینطور پروژه ها رو در جایی آرشیو کنید یا به سیستم دیگری منتقل کنید باید حواستون باشه که همه فایل ها در پوشه خود پروژه نیست و فایل هایی که بهشون Link داده اید در مسیر پوشه متفاوتی قرار دارند. برای پروژه های کوچک مناسبه ولی برای پروژه های جامع توصیه اش نمی کنم.
152102
یک حالت دیگه اینه که شما می خواهید فرم ها رو در قالب پروژه های جانبی ایجاد کنید و در پروژه اصلی نمایش شون بدهید.
در این حالت شما پروژه های جانبی رو بصورت Windows Forms Control Library ایجاد می کنید.
سپس در Solution پروژه اصلی این پروژه های جانبی رو اضافه می کنید (...File > Add > Extsiting Project)
و به پروژه اضافه شده رفرنس می دهید یعنی تیک میزنید. (Project > Add Reference... > Projects)
حالا می توانید در هر جایی از پروژه اصلی با اضافه کردن اسم اون پروژه جانبی (اضافه کردن namespace اش) از فرم مورد نظر شیء ایجاد کنید و نمایش بدهید.
مثلا از فرم WindowsFormsControlLibrary1.Form1 شیء بسازید.

یک حالت دیگه اینه که شما می خواهید dll هایی بصورت پلاگین بسازید که الان موقع ساختن پروژه اصلی هنوز طراحی نشده اند و ممکنه در آینده dll های جدیدی بسازید که فرم های متفاوتی دارند. این حالت یعنی شما موقع ساختن پروژه اصلی نمی دونید Form1 ای که داخل یک پلاگین dll بعدا به برنامه اضافه میشه چه شکلی است.
بر خلاف ظاهرش پیچیده نیست، شما اسمبلی dll مورد نظر رو میخونید و ازش می خواهید که Form1 رو نشون بده. شما می توانید هر Windows Forms Control Library ای که Form1 ای داره رو جایگزین اون dll قبلی کنید تا فرم متفاوتی نمایش داده بشه.
در مثال پیوستی (Solution ئه CallDllFormSample.sln) یک برنامه اصلی هست که تا موقع اجرا نمیدونه چند تا پلاگین dll داره و موقع اجرا میتونه هر فرمی که در اون dll ها هست نمایش بده. دقت کنید که Solution رو در ویژوال استدیو باز کنید تا پروژه های جانبی هم باز بشن و فایل های dll جانبی Build بشه.

152103

152104

Hossein_C#_sabz
جمعه 14 شهریور 1399, 16:13 عصر
ممنون مهندس جان، بابت پاسخ جامع و کاملتون. امتحان میکنم نتیجه رو عرض میکنم خدمتتون.