PDA

View Full Version : سوال: exe گرفتن از تعدادی از فرمها از طریق کد نوشته شده



Marzieh_A
سه شنبه 15 دی 1388, 22:37 عصر
سلام به دوستان عزیز
یه سوالی برام پیش اومده و اون اینه که چه جوری میشه از طریق کدی که در C# نوشتیم از یه تعدادی از فرمهای موجود در برنامه exe بگیریم؟
یعنی اینکه از طریق برنامه ای که ایجاد کردیم یه برنامۀ دیگه به صورت exe بسازیم.
:متفکر:
این قسمتی از پروژه پایانی من هست اگر سوالم واضح نیست بگید بیشتر توضیح بدم.

AliRezaPro
سه شنبه 15 دی 1388, 23:33 عصر
چند بار خوندم ولی هیچی نفهمیدم !

اَرژنگ
چهارشنبه 16 دی 1388, 06:42 صبح
چند بار خوندم ولی هیچی نفهمیدم !
شما تنها نیستید!
اگر مثالی یا اینکه هدفشهان چی هست را توضیح بدند بهتر میشه .

Marzieh_A
چهارشنبه 16 دی 1388, 08:53 صبح
خوب بزاريد بيشتر توضيح بدم.
ببينيد پروژه نهايي من در مورد برنامه اي هست كه توسط اون بشه يه cd آموزشي ايجاد كرد.
ما توي پروژه فرمهايي رو قرار داديم كه از طريق اون به صورت پيش نمايش cd آموزشي كه قراره ايجاد بشه (طبق اون انتخاب هايي كه كاربر انجام داده كه توي اين سوال مهم نيست!) رو به كاربر نشون ميده.
مي خوام ببينم ميشه توي برنامه كدي نوشت كه اين فرمها رو به صورت يه فايل جدا و با پسوند exe يه جايي تو هارد save كرد؟

naeeme
چهارشنبه 16 دی 1388, 09:34 صبح
در واقع می خواید RUN TIME یک کد رو Generate کنید و اون رو کامپایل و اجرا کنید؟؟؟ فایلهای DLL و Exe اون رو هم داشته باشید؟؟؟
نمی گم امکان پذیر نیست اما سخته!!
اَرژنگ توی این کارا استاده!!

slashslash2009
چهارشنبه 16 دی 1388, 13:26 عصر
میشه با یک ترفند این کارو انجام داد و اونم اینه که مثلا شما یک فرم اصلی دارید که با اون چندتا فرم دیگه بوجود میارید برنامتون هم که exe هست بعد از بوجود اوردن فرمهای دیگتون کاری کنید که موقع اجرای برنامه دیگه فرم اولی رو نشون نده و یه راست مثلا به فرم دوم بره البته این کارو قبلا من انجام دادم جواب گرفتم. موقع شروع برنامه باید یه شرطی رو چک کنه که ببینه آیا فرمهای جدید طراحی شدن یا نه .به هر حال این یک ترفنده

Amir Oveisi
چهارشنبه 16 دی 1388, 13:49 عصر
شما میتونین برای این که در زمان اجرای برنامه و از طریق خود برنامه، اسمبلی های دات نت رو ایجاد کنید میتونین از System.CodeDom استفاده کنید که امکانات استفاده از compiler دات نت رو به برنامه شما میده به این صورت که با استفاده از فضای نام Microsoft.CSharp و کلاس CSharpCodeProvider سورس کد مورد نظر رو به یک شی ICodeCompiler میدین و کدتون رو کامپایل می کنید. امکان گرفتن خروجی فایل Exe و یا dll رو هم دارین و میتونین resource ها و reference هایی رو که میخواین اضافه کنید.
شما برای این کارتون میتونین یک سورس پیش فرض داشته باشید که با توجه به تنظیماتی که کاربر در برنامه اعمال میکنه این سورس شما هم متناسب با اون تغییر میکنه و در آخر هم کامپایل شده و فایل exe مورد نظر شما رو generate میکنه.
برای آشنایی با اینکه چجوری از این روش استفاده کنید این لینک رو ببینید :
http://www.codeproject.com/KB/cs/codecompilation.aspx

لطفا اگر سوالی داشتید یا بنده سوالتون رو درست متوجه نشدم اعلام کنید.

موفق باشید

اَرژنگ
چهارشنبه 16 دی 1388, 16:55 عصر
میشه با یک ترفند این کارو انجام داد و اونم اینه که مثلا شما یک فرم اصلی دارید که با اون چندتا فرم دیگه بوجود میارید برنامتون هم که exe هست بعد از بوجود اوردن فرمهای دیگتون کاری کنید که موقع اجرای برنامه دیگه فرم اولی رو نشون نده و یه راست مثلا به فرم دوم بره البته این کارو قبلا من انجام دادم جواب گرفتم. موقع شروع برنامه باید یه شرطی رو چک کنه که ببینه آیا فرمهای جدید طراحی شدن یا نه .به هر حال این یک ترفنده

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

اَرژنگ
چهارشنبه 16 دی 1388, 17:10 عصر
خوب بزاريد بيشتر توضيح بدم.
ببينيد پروژه نهايي من در مورد برنامه اي هست كه توسط اون بشه يه cd آموزشي ايجاد كرد.
ما توي پروژه فرمهايي رو قرار داديم كه از طريق اون به صورت پيش نمايش cd آموزشي كه قراره ايجاد بشه (طبق اون انتخاب هايي كه كاربر انجام داده كه توي اين سوال مهم نيست!) رو به كاربر نشون ميده.
مي خوام ببينم ميشه توي برنامه كدي نوشت كه اين فرمها رو به صورت يه فايل جدا و با پسوند exe يه جايي تو هارد save كرد؟

این فرمها در چه مواردی به هم شباهت دارند و از چه مواردی تفاوت؟
داشتن زیادی برنامه‌هایه مختلف یکمی غیره عادی است، خودتان را به جایه کاربر بزارید که بین ۱۰ تا برنامه که اجرا کند را باید انتخاب کنه.
شما هدفتان را بیان نکردید بلکه اینکه چه جوری به هدفتان میخواهید برسید را گفتید و بنابر اون جواب گرفتید.
بدانه اینکه فکر کنید راح حلتان چی هست، مشکل اصلی را بیان کنید.

slashslash2009
چهارشنبه 16 دی 1388, 18:09 عصر
فکر کنم بعضی از برنامه هایی که کارای مولتی مدیا autorun می سازند از این راه استفاده میکنند البته با زبان دلفی بیشتر

Marzieh_A
چهارشنبه 16 دی 1388, 21:43 عصر
شما میتونین برای این که در زمان اجرای برنامه و از طریق خود برنامه، اسمبلی های دات نت رو ایجاد کنید میتونین از System.CodeDom استفاده کنید که امکانات استفاده از compiler دات نت رو به برنامه شما میده به این صورت که با استفاده از فضای نام Microsoft.CSharp و کلاس CSharpCodeProvider سورس کد مورد نظر رو به یک شی ICodeCompiler میدین و کدتون رو کامپایل می کنید. امکان گرفتن خروجی فایل Exe و یا dll رو هم دارین و میتونین resource ها و reference هایی رو که میخواین اضافه کنید.
شما برای این کارتون میتونین یک سورس پیش فرض داشته باشید که با توجه به تنظیماتی که کاربر در برنامه اعمال میکنه این سورس شما هم متناسب با اون تغییر میکنه و در آخر هم کامپایل شده و فایل exe مورد نظر شما رو generate میکنه.
برای آشنایی با اینکه چجوری از این روش استفاده کنید این لینک رو ببینید :
http://www.codeproject.com/KB/cs/codecompilation.aspx

لطفا اگر سوالی داشتید یا بنده سوالتون رو درست متوجه نشدم اعلام کنید.

موفق باشید

این چیزی که گفتید و مثالش رو قرار دادید تقریبا همون چیزیه که من می خوام یعنی compile شدن قسمت اضافه شده به برنامه توسط خود برنامه.
اگر ممکنه برای من مثالی از همین exe گرفتن هم بزارید خیلی ممنون می شم.
یه مثال کوچیک در حد اینکه 2 فرم رو ایجاد کنه و exe بگیره.



این فرمها در چه مواردی به هم شباهت دارند و از چه مواردی تفاوت؟
داشتن زیادی برنامه‌هایه مختلف یکمی غیره عادی است، خودتان را به جایه کاربر بزارید که بین ۱۰ تا برنامه که اجرا کند را باید انتخاب کنه.
شما هدفتان را بیان نکردید بلکه اینکه چه جوری به هدفتان میخواهید برسید را گفتید و بنابر اون جواب گرفتید.
بدانه اینکه فکر کنید راح حلتان چی هست، مشکل اصلی را بیان کنید.

دوست عزیزم من چندین فرم در این برنامه دارم.
اولین فرم، فرمی هست که به عنوان اولین فرم یا splash استفاده میشه.
فرم دوم فرمی هست که فصلهای مبحث مربوطه رو نشون میده که شامل درسهای هر فصل هم میشه و فرم سوم فرمی هست که درس رو به همرا عکسها و فیلمها (در صورت وجود) نشون میده.
وجود این فرمها و اینکه چند تا هستند مهم نیست ... مهم اینه که چه جوری از مثلا دو تا فرم به ترتیب موجود در برنامه exe بگیریم.



میشه با یک ترفند این کارو انجام داد و اونم اینه که مثلا شما یک فرم اصلی دارید که با اون چندتا فرم دیگه بوجود میارید برنامتون هم که exe هست بعد از بوجود اوردن فرمهای دیگتون کاری کنید که موقع اجرای برنامه دیگه فرم اولی رو نشون نده و یه راست مثلا به فرم دوم بره البته این کارو قبلا من انجام دادم جواب گرفتم. موقع شروع برنامه باید یه شرطی رو چک کنه که ببینه آیا فرمهای جدید طراحی شدن یا نه .به هر حال این یک ترفنده

دوست عزیزم ایده ای که گفتید خیلی جالبه اما اینطور که من فهمیدم منظور شما اینه که برنامۀ اصلی رو تغییر بدیم. یعنی exeی اصلی ما تغییر کنه.
اما چیزی که من دنبالشم اینه که محیطی ایجاد کنم که برنامۀ نهایی رو به صورت فایلی جدا ایجاد کنه.
به طور مثال برنامۀ office رو در نظر بگیرید. مثلا office word محیطی هست که فایلهای با پسوند خاص رو ایجاد و یا ویرایش میکنه.
من یه همچین عملکردی می خوام (نه در این حد اما یه برنامۀ ساده با این منطق).


بازم ممنون از دوستان که وقت گذاشتید :قلب:

اَرژنگ
پنج شنبه 17 دی 1388, 17:25 عصر
به طور مثال برنامۀ office رو در نظر بگیرید. مثلا office word محیطی هست که فایلهای با پسوند خاص رو ایجاد و یا ویرایش میکنه.
من یه همچین عملکردی می خوام (نه در این حد اما یه برنامۀ ساده با این منطق).


بازم ممنون از دوستان که وقت گذاشتید :قلب:

فکر کنم شما در حقیقت دنبال یک برنامه Viewer برایه فایلهایه بخصوص خودتان هستید.
اینکه یک فایل را کلیک کنند و در برنامه شما باز بشه و نمایش داده بشه.
درست؟ یا یک چیزه دیگر؟

slashslash2009
پنج شنبه 17 دی 1388, 17:37 عصر
البته چیزی که من گفتم فایل exe رو تغییر نمیده فقط فرم اصلیتونو نشون نمیده و فرمهای دیگه بوجود اومده رو نشون میده . در ضمن کاری که شما میخواید انجام بدین کار مشکلی هست اون دوستمونم که گفتن کدهارو یک شی تبدیل میکنه و بعد exe میکنه خیلی جالبه ولی باید کدهارو از قبل مثلا در یک فایل متنی داشته باشیم ساختن کد به این آسونیها نیست در ضمن برنامه شما باید به صورت پویا باشه یعنی تمام فرمها و شی هاتون به صورت آرایه باشه

Marzieh_A
پنج شنبه 17 دی 1388, 20:25 عصر
فکر کنم شما در حقیقت دنبال یک برنامه Viewer برایه فایلهایه بخصوص خودتان هستید.
اینکه یک فایل را کلیک کنند و در برنامه شما باز بشه و نمایش داده بشه.
درست؟ یا یک چیزه دیگر؟

هم یه viewer هست و هم خودش این فایلی که view می کنه رو ایجاد میکنه.


البته چیزی که من گفتم فایل exe رو تغییر نمیده فقط فرم اصلیتونو نشون نمیده و فرمهای دیگه بوجود اومده رو نشون میده . در ضمن کاری که شما میخواید انجام بدین کار مشکلی هست اون دوستمونم که گفتن کدهارو یک شی تبدیل میکنه و بعد exe میکنه خیلی جالبه ولی باید کدهارو از قبل مثلا در یک فایل متنی داشته باشیم ساختن کد به این آسونیها نیست در ضمن برنامه شما باید به صورت پویا باشه یعنی تمام فرمها و شی هاتون به صورت آرایه باشه

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

اَرژنگ
جمعه 18 دی 1388, 01:21 صبح
هم یه viewer هست و هم خودش این فایلی که view می کنه رو ایجاد میکنه.

به اون میگن Editor، شما میخواهید کاربر فایلهایه جدید ایجاد کند؟



یعنی ممکن نیست توی برنامه از چند تا از فرمهای موجود exe گرفت؟
هیچ وقت به این که چنین کاری لازم باشد برنخوردم ولی چرا به تعداد فرمها پروژهایها مجزا درست نمیکنید و دوباره هر فرم را استفاده کنید؟
اگر یک چیزی مانند Word میخاهید میشه راهنمائی کرد، ولی هنوز من اینکه نیاز شما چی هست را درک نمیکنم.

Marzieh_A
جمعه 18 دی 1388, 11:13 صبح
هیچ وقت به این که چنین کاری لازم باشد برنخوردم ولی چرا به تعداد فرمها پروژهایها مجزا درست نمیکنید و دوباره هر فرم را استفاده کنید؟


میشه این مورد رو بیشتر توضیح بدید؟ منظورتون رو متوجه نشدم. یعنی برای عر فرم یه فایل خروجی مجزا بگیرم؟



اگر یک چیزی مانند Word میخاهید میشه راهنمائی کرد، ولی هنوز من اینکه نیاز شما چی هست را درک نمیکنم.

واقعا دیگه دارم از بیان خودم نا امید می شم یعنی من اینقدر گنگ و بد منظورم رو گفتم؟
بذارید دوباره توضیح بدم. :لبخند:
من یه محیط نرم افزاری می خوام درست کنم که از طریق اون بشه یه cd آموزشی ساخت.
برای اینکار وقتی وارد این محیط میشید مثل power point چندین template برای ایجاد پروژه وجود داره.
یکی از این template ها که توسط کاربر انتخاب شد فرمهای مورد نظر و مربوط به اون template ( این فرمها قبلا در برنامه وجود دارند و قفط با انتخاب های کاربر پر می شن. ) انتخاب می شن و در صفحات بعدی طبق روندی که در یک cd آموزشی مرسوم است فرمها توسط اطلاعاتی که کاربر می ده پر میشه و مرحله به مرحله جلو میره. بعد که تمام اطلاعات مربوطه پر شد در نهایت کاربر نیاز به یه فایل خروجی داره و اون از نظر من باید exe باشه تا بتونه در هر محیطی اجرا بشه. ( البته اینی که شما گفتید یه برنامه مثل word می خوام ... منظور من از اون مثال این بود که مفهوم خواسته ام رو بهتر برسونم ... اما اگر به نظر شما میشه یه پسوند اختصاصی برای این فایلها که با این نرم افزار ساخته و یا برای edit کردن open میشن ایجاد کرد روند کار رو بهم بگید. )
این فایل خروجی فقط از اون فرمهای template که توسط کاربر انتخاب شده ایجاد میشه یعنی فقط تعدادی از فرمهای موجود در برنامه تبدیل به یه فایل خروجی میشن.

اگر بشه از اینا exe گرفت که خیلی عالی میشه ولی به نظر شما میشه یه پسوند اختصاصی برای این فایلها ایجاد کرد؟ که در صورتی که بخوان استفاده بشن حتما برنامۀ اصلی که من دارم می نویسم باید نصب بشه و از اون طریق این فایلها باز بشه.:متفکر:

امیدوارم این دفعه منظورم رو کامل و شیوا بیان کرده باشم. :افسرده:

اَرژنگ
جمعه 18 دی 1388, 11:40 صبح
میشه این مورد رو بیشتر توضیح بدید؟ منظورتون رو متوجه نشدم. یعنی برای عر فرم یه فایل خروجی مجزا بگیرم؟



واقعا دیگه دارم از بیان خودم نا امید می شم یعنی من اینقدر گنگ و بد منظورم رو گفتم؟
بذارید دوباره توضیح بدم. :لبخند:
من یه محیط نرم افزاری می خوام درست کنم که از طریق اون بشه یه cd آموزشی ساخت.
برای اینکار وقتی وارد این محیط میشید مثل power point چندین template برای ایجاد پروژه وجود داره.
یکی از این template ها که توسط کاربر انتخاب شد فرمهای مورد نظر و مربوط به اون template ( این فرمها قبلا در برنامه وجود دارند و قفط با انتخاب های کاربر پر می شن. ) انتخاب می شن و در صفحات بعدی طبق روندی که در یک cd آموزشی مرسوم است فرمها توسط اطلاعاتی که کاربر می ده پر میشه و مرحله به مرحله جلو میره. بعد که تمام اطلاعات مربوطه پر شد در نهایت کاربر نیاز به یه فایل خروجی داره و اون از نظر من باید exe باشه تا بتونه در هر محیطی اجرا بشه. ( البته اینی که شما گفتید یه برنامه مثل word می خوام ... منظور من از اون مثال این بود که مفهوم خواسته ام رو بهتر برسونم ... اما اگر به نظر شما میشه یه پسوند اختصاصی برای این فایلها که با این نرم افزار ساخته و یا برای edit کردن open میشن ایجاد کرد روند کار رو بهم بگید. )
این فایل خروجی فقط از اون فرمهای template که توسط کاربر انتخاب شده ایجاد میشه یعنی فقط تعدادی از فرمهای موجود در برنامه تبدیل به یه فایل خروجی میشن.

اگر بشه از اینا exe گرفت که خیلی عالی میشه ولی به نظر شما میشه یه پسوند اختصاصی برای این فایلها ایجاد کرد؟ که در صورتی که بخوان استفاده بشن حتما برنامۀ اصلی که من دارم می نویسم باید نصب بشه و از اون طریق این فایلها باز بشه.:متفکر:

امیدوارم این دفعه منظورم رو کامل و شیوا بیان کرده باشم. :افسرده:
بله، حالا کاملا واضح است.
البته که میشه برایه فایلها پسوند اختصاصی ایجاد کرد، که با برنامه خودتان باز بشند (همانطوری که Word فایلهایی را که پسوند بازمیکند ، اگر چه این Word نیست که بازشان میکند، پسوندها در سیستم رجیستر شدن که با ورد باز بشند و زمان که کاربر بخواهد یکی از فیلهایه ورد را بازکند سیستم ورد را فعال میکنه و اینکه چه فایلی را نشان بده را بهش پاس میده).
در مورد exe کردن فرمها، منظورم این بود که فرض کنید که یک پروژه با ۳ تا فرم دارید (فرم ۱،۲،۳).
حالا میتونید یک پروژه یگر بسازید و فقط فرم ۱ را بهش اضافه کنید، یک پروژه دیگر که فرمهایه ۲ ،۳ را داشته باشد (به شرطی که فرمها به همدیگر وبستگی نداشته باشند)، حالا اگر در هر کدام از پروژه‌ها شما فرم ۱ را ویرایش کنید در تمام پروژها فرم ۱ ویرایش میشه، و وقتی که سلوشن را بیلد کنید تمام پروژه‌ها با هم بیلد میشند و هر فرمی که استفاده شده بشد (به شکل مجزا در هر پروژکت به شکل فرم اصLی اون پروژکت ) به شکل exe در اختیارتان خاهد بود.
در مورد استفاده از روشهایه داینامیک برایه بوجود آوردن فرمها (در زمان اجرا ) ، سی‌شارپ ۴ مزایایه جدیدی را آورده که این روش را آسانتر کرده ولی با این همه این روش از ۲ روش دیگر (استفاده از رجسیتر کردن فایلهایه خاص خودتان و پروژهایه مختلف با فرمهایه مختلف ) پیچیده‌تر است.
یک چیزی که (همین الان) به ذهنم آمد این است که ، WPF قابلیت اینکه فرمها را شکل مجزا از برنامه داشته باشید را فراهم میکنه ولی مدل کار باهاش را باید یاد بگیرید (ولی حتماً میارزه چونکه برایه کارهایه نمایشی ایجاد شده).
اگر چیزه دیگری به فکرم بیاد اینجا میفرستم، یا هم اینکه یادم بندازید.

Marzieh_A
جمعه 18 دی 1388, 13:10 عصر
بازم ممنون دوست عزیزم :لبخندساده:



البته که میشه برایه فایلها پسوند اختصاصی ایجاد کرد، که با برنامه خودتان باز بشند (همانطوری که Word فایلهایی را که پسوند بازمیکند ، اگر چه این Word نیست که بازشان میکند، پسوندها در سیستم رجیستر شدن که با ورد باز بشند و زمان که کاربر بخواهد یکی از فیلهایه ورد را بازکند سیستم ورد را فعال میکنه و اینکه چه فایلی را نشان بده را بهش پاس میده).


می تونم هنگام نصب برنامه از طریق رجیستری این پسوند رو رجیستر کنم.



در مورد exe کردن فرمها، منظورم این بود که فرض کنید که یک پروژه با ۳ تا فرم دارید (فرم ۱،۲،۳).
حالا میتونید یک پروژه یگر بسازید و فقط فرم ۱ را بهش اضافه کنید، یک پروژه دیگر که فرمهایه ۲ ،۳ را داشته باشد (به شرطی که فرمها به همدیگر وبستگی نداشته باشند)، حالا اگر در هر کدام از پروژه‌ها شما فرم ۱ را ویرایش کنید در تمام پروژها فرم ۱ ویرایش میشه، و وقتی که سلوشن را بیلد کنید تمام پروژه‌ها با هم بیلد میشند و هر فرمی که استفاده شده بشد (به شکل مجزا در هر پروژکت به شکل فرم اصLی اون پروژکت ) به شکل exe در اختیارتان خاهد بود.


من اینجا درست منظور شما رو متوجه نشدم.
منظورتون اینه که فرمهای ایجاد شده، به جای فرمهای اصلی برنامه، جایگزین میشن؟ یعنی در اصل فایلی که ایجاد میشه همون برنامۀ اصلی هست که تغییر کرده؟ اگر منظور شما این باشه، من توی این برنامه خیلی فرم دارم ( چون چندین template دارم ) و فقط تعداد کمی از اونها به پروژۀ نهایی تبدیل میشن. تکلیف بقیه فرمها چی میشه؟



در مورد استفاده از روشهایه داینامیک برایه بوجود آوردن فرمها (در زمان اجرا ) ، سی‌شارپ ۴ مزایایه جدیدی را آورده که این روش را آسانتر کرده ولی با این همه این روش از ۲ روش دیگر (استفاده از رجسیتر کردن فایلهایه خاص خودتان و پروژهایه مختلف با فرمهایه مختلف ) پیچیده‌تر است.


فکر می کنم اینجوری که شما بیان کردید نتیجه می گیریم که ایجاد یه پسوند اختصاصی برای فایلها و باز شدن اونها با برنامۀ خاص آسون تر از این باشه که exe تولید کنیم؟
اگر اینطوره ممنون می شم در مورد روند این کار منو بیشتر راهنمایی کنید. اینکه چه جوری بتونم یه فایل جدید با یه پسوند خاص از تعدادی از فرمها ( فقط تعدادی از فرمها ) ایجاد کنم؟



یک چیزی که (همین الان) به ذهنم آمد این است که ، WPF قابلیت اینکه فرمها را شکل مجزا از برنامه داشته باشید را فراهم میکنه ولی مدل کار باهاش را باید یاد بگیرید (ولی حتماً میارزه چونکه برایه کارهایه نمایشی ایجاد شده).


در مورد wpf زیاد شنیدم و قابلیتهای گرافیکی که در اون وجود داره. اما یه منبع کامل و خوب ازش پیدا نکردم. در کتابهای C#‎ 2008 ( البته کتابهایی که من دیدم و خوندم ) زیاد در مورد wpf و تکنیکهای موجود در اون توضیح داده نشده و خیلی گذراست.

یه سوال دیگه که دارم اینه که قابلیت داشتن فرمها به شکل مجزا از برنامه باعث راحت تر شدن گرفتن فایل خروجی از تعدادی از فرمهای داخل برنامه میشه؟

اَرژنگ
جمعه 18 دی 1388, 18:04 عصر
می تونم هنگام نصب برنامه از طریق رجیستری این پسوند رو رجیستر کنم.

بله مثال رجیستر کردن در همین فروم هست.




من اینجا درست منظور شما رو متوجه نشدم.
منظورتون اینه که فرمهای ایجاد شده، به جای فرمهای اصلی برنامه، جایگزین میشن؟ یعنی در اصل فایلی که ایجاد میشه همون برنامۀ اصلی هست که تغییر کرده؟ اگر منظور شما این باشه، من توی این برنامه خیلی فرم دارم ( چون چندین template دارم ) و فقط تعداد کمی از اونها به پروژۀ نهایی تبدیل میشن. تکلیف بقیه فرمها چی میشه؟

شاید من دارم شما را گیج میکنم ولی به این مثال نگاه بندازید و ببینید کاری که لازم دارید اصلاً شبیه به این که میگم هست و یا نه:
فرض کنید یک پروژه داریم با ۳ تا فرم.
شما میگید میخواهید بعضی از این فرمها را exe بگیرید (با اینکه مفهومتان را از exe گرفتن من نمیتونم درک کنم). فرض کنیم که میخواهید که از فرم ۱ و ۳ جداگانه از هر کدام exe بگیرید.
یک پروژه جدید میسازید و فرم ۱ را به جایه فرم اصلی این پروژه جایگزین میکنیم.
یک پروژه دیگر میسازیم و فرم ۳ را به جایه فرم اصلی این پروژه جایگزین میکنیم.
حالا شما ۳ تا پروژه دارید و ۳ تا مختلف بدستان میاد، ۲ تا پروژه آخری را هر کدام را اجرا کنید فرمی را که بخواهید نشان میده.

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

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





فکر می کنم اینجوری که شما بیان کردید نتیجه می گیریم که ایجاد یه پسوند اختصاصی برای فایلها و باز شدن اونها با برنامۀ خاص آسون تر از این باشه که exe تولید کنیم؟
اگر اینطوره ممنون می شم در مورد روند این کار منو بیشتر راهنمایی کنید. اینکه چه جوری بتونم یه فایل جدید با یه پسوند خاص از تعدادی از فرمها ( فقط تعدادی از فرمها ) ایجاد کنم؟





در مورد wpf زیاد شنیدم و قابلیتهای گرافیکی که در اون وجود داره. اما یه منبع کامل و خوب ازش پیدا نکردم. در کتابهای C#‎‎ 2008 ( البته کتابهایی که من دیدم و خوندم ) زیاد در مورد wpf و تکنیکهای موجود در اون توضیح داده نشده و خیلی گذراست.

یه سوال دیگه که دارم اینه که قابلیت داشتن فرمها به شکل مجزا از برنامه باعث راحت تر شدن گرفتن فایل خروجی از تعدادی از فرمهای داخل برنامه میشه؟

روش رجیتر کردن پسوند برایه این است که فایلهایی را که با فرمتشان آشنایی دارید و برنامه‌تان قابلیت ویرایششان را دارد هندل کنید.
مثلاً مانند فایلهایه تکست که با نت پد باز میشند.

یا Power Point که فایلهایه با پسوند ppt را هندل میکند.

در مد نظر شما از فرمهایه برنامه exe گرفتن چه قابلیتی را دارد؟

نگران توضیح دادن نباشید، یا اینکه یک قابلیت بخصوصی است که شما دنبالش هستید و در نظر شما با exe گرفتن از فرمها این قابلیت بدست میاد و یا هم اینکه اصلاً احتیاج بنیانی شما چیز دیگری است.

اگر روش ساختن یک چیزی مانند Power Point که تمپلیهایه مختلف دارد بکارتان میاد بفرمائید.

در ضمن وقتی که میگید فرم، منظورتان ویندوز فرمها هستند بله؟ یا اینکه یک نوع فرم دیگر ؟ (فرمهایه اداری مثلاً).

در مورد WPF، ویندوز فرمها دیگر قدیمی شدند و راه‌های بسیار بیشتری را اراعه میده. هر جوری شده یاد گرفتنشان میارزه.

چونکه به تنهایی خودش از یک کتاب کمتر جا نمیگیره! کتابهایه مختلف زیاد وجود دارد ولی از کتاب بهتر اینترنت ! یک گوگل کنید : WPF Tutorials
کلی مثال پیدا میکنید.

Marzieh_A
جمعه 18 دی 1388, 20:23 عصر
فرض کنید یک پروژه داریم با ۳ تا فرم.
شما میگید میخواهید بعضی از این فرمها را exe بگیرید (با اینکه مفهومتان را از exe گرفتن من نمیتونم درک کنم). فرض کنیم که میخواهید که از فرم ۱ و ۳ جداگانه از هر کدام exe بگیرید.
یک پروژه جدید میسازید و فرم ۱ را به جایه فرم اصلی این پروژه جایگزین میکنیم.
یک پروژه دیگر میسازیم و فرم ۳ را به جایه فرم اصلی این پروژه جایگزین میکنیم.
حالا شما ۳ تا پروژه دارید و ۳ تا مختلف بدستان میاد، ۲ تا پروژه آخری را هر کدام را اجرا کنید فرمی را که بخواهید نشان میده.


اما من می خوام تعدادی از فرمها به صورت یکجا و با ترتیب معلوم شده exe بشن پس فکر کنم این روش جواب نده.



در مد نظر شما از فرمهایه برنامه exe گرفتن چه قابلیتی را دارد؟


ببنید دوست عزیز، قصد من از ایجاد فایل exe این هست که یه فایل نهایی برای cd آموزشی ساخته شده ایجاد کنم. حتما شما هم cd های آموزشی زیادی دیدید و متوجه هستید که در این نوع نرم افزارها یه فایل exe وجود داره که طبق آدرسهایی که در کد برنامه دادیم فایلهایی به صورت تکست یا عکس یا صدا و یا حتی قیلم رو اجرا می کنه. من این فایلها رو در دیتابیس دخیره نمی کنم و در فلودر هایی در root سی دی مورد نظر ذخیره می کنم. اما برای اجرای برنامۀ کد شده نیاز دارم که این برنامه یا به صورت exe باشه که در هر محیطی اجرا بشه و مشکلی پیش نیاد و یا اینکه یه پسوند خاص داشته باشه فقط با برنامۀ خودم باز بشه.



اگر روش ساختن یک چیزی مانند Power Point که تمپلیهایه مختلف دارد بکارتان میاد بفرمائید.


ببینید منظور من از عنوان کردن power point شباهت روند استفاده شده در این برنامه با روند استفاده شده با برنامۀ من هست.
شما تصور کنید که من می خوام یه برنامه مثل power point بسازم ( البته منظور من نوع عملکرد این برنامه هستش نه دقیقا خود برنامه ). برنامه ای که فایلهایی با پسوند خاص رو هم ایجاد و هم edit میکنه. البته باید توجه داشته باشید که من دقیقا همین عملکرد رو می خوام یعنی مثل power point که ممکنه 30 تا اسلاید رو به یه فایل ppt تبدیل کنه منم می خوام با این برنامه مثلا 4 تا فرم رو به یه فایل تبدیل کنم. در ابتدا من فکر می کردم این پسوند حتما باید exe باشه اما با توضیحات شما و دوستان و بیشتر فکر کردن به این موضوع دیدم که اگر فایل نهایی یه پسوند تعریف شده برای خوده برنامه باشه بهتره. یعنی کاربر برای اجرای فایلها با این پسوند ملزم به اجرای برنامۀ اصلی باشه.



در ضمن وقتی که میگید فرم، منظورتان ویندوز فرمها هستند بله؟ یا اینکه یک نوع فرم دیگر ؟ (فرمهایه اداری مثلاً).


بله دقیقا منظور من windows form هست.

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

یه سوال دیگه هم دارم اینه که یه همچین امکانی که بشه یه پسوند جدید برای فایلها ساخت و اونها رو به یه برنامه که خودمون نوشتیم مربوط کرد وجود داره؟

بازم ممنون :لبخندساده:

slashslash2009
جمعه 18 دی 1388, 20:59 عصر
شما باید تمام جزئیات فرمتونو از قبیله کلیدها تکستباکسا و غیره مثلا جاشون اندازشون محتواشون و غیره رو در فایلتون ذخیره کنید . باید فایلتونو طراحی کنید درست مثل یک دیتابیس ببینید به چه چیزهایی نیاز دارید باید همه چیز آرایه پویا باشه من قبلا واسه یکی از فرمهام که چکها را نشون میداد یک چنین کاری کردم ولی بااین تفاوت که در خود دیتا بیس ذخیره میکردم نه در یک فایل آخه ساخت فایل دردسره:گریه:

Marzieh_A
جمعه 18 دی 1388, 22:14 عصر
شما باید تمام جزئیات فرمتونو از قبیله کلیدها تکستباکسا و غیره مثلا جاشون اندازشون محتواشون و غیره رو در فایلتون ذخیره کنید . باید فایلتونو طراحی کنید درست مثل یک دیتابیس ببینید به چه چیزهایی نیاز دارید باید همه چیز آرایه پویا باشه

چرا باید همچین کاری بکنم مگه نمی شه تعدادی از فرمها رو هیچ جوری به صورت یه فایل جدا save کرد؟:افسرده:


واسه یکی از فرمهام که چکها را نشون میداد یک چنین کاری کردم ولی بااین تفاوت که در خود دیتا بیس ذخیره میکردم نه در یک فایل آخه ساخت فایل دردسره:گریه:

دقیقا درست می گید و ساخت فایل دردسره اما واقعا کسی هست که یه cd آموزشی بخره و برای دیدن اون بیاد sql server نصب کنه؟
این cd آموزشی مطمئنا همیشه دست کسی نمیفته که به مباحث کامپیوتر از جمله sql server وارد باشه. پس تفهیم کردن این موضوعات (طریقۀ نصب و پیکر بندی sql) به کسی که به خود کامپیوتر زیاد وارد نیست چه برسه به database خیلی سخت تره!
البته همۀ cd های آموزشی مستقیما از فایل استفاده می کنند نه از دیتابیس. :ناراحت:

Amir Oveisi
جمعه 18 دی 1388, 22:44 عصر
برای اینکار وقتی وارد این محیط میشید مثل power point چندین template برای ایجاد پروژه وجود داره.
یکی از این template ها که توسط کاربر انتخاب شد فرمهای مورد نظر و مربوط به اون template ( این فرمها قبلا در برنامه وجود دارند و قفط با انتخاب های کاربر پر می شن. ) انتخاب می شن و در صفحات بعدی طبق روندی که در یک cd آموزشی مرسوم است فرمها توسط اطلاعاتی که کاربر می ده پر میشه و مرحله به مرحله جلو میره. بعد که تمام اطلاعات مربوطه پر شد در نهایت کاربر نیاز به یه فایل خروجی داره و اون از نظر من باید exe باشه تا بتونه در هر محیطی اجرا بشه


قصد من از ایجاد فایل exe این هست که یه فایل نهایی برای cd آموزشی ساخته شده ایجاد کنم. حتما شما هم cd های آموزشی زیادی دیدید و متوجه هستید که در این نوع نرم افزارها یه فایل exe وجود داره که طبق آدرسهایی که در کد برنامه دادیم فایلهایی به صورت تکست یا عکس یا صدا و یا حتی قیلم رو اجرا می کنه. من این فایلها رو در دیتابیس دخیره نمی کنم و در فلودر هایی در root سی دی مورد نظر ذخیره می کنم.

سلام
با این توضیحاتی که دادین به هیچ کدوم از این روش های بحث شده نیازی نیست و کارتون ساده تر از این حرفاست.
شما گفتید که فقط به تعداد محدودی template دارید که اونا هم از قبل ایجاد شدن و کنترل هایی هم که در هر template وجود دارن ثابتن (مثلا اگر template1 دارای دو picturebox در بالای فرم است بعدا نیز به همین صورت باقی خواهد ماند).
و با توجه به نقل قول دومی که ازتون گذاشتم میشه به یک روش ساده و کارا برای حل مشکلتون رسید:

تنها چیزی که در هر template قابل تغییر باشه همون media هایی هستن که باید نشون داده بشن اعم از text، عکس فیلم و ...
بنابراین برنامه شما باید دو تا خروجی داشته باشه:
1- یک فایل Exe از template انتخاب شده توسط کاربر (که باید از قبل آماده شده باشه و در کنار برنامه اصلی که دارین باهاش cd آموزشی میسازین باشه) که همه کنترل هاش در ابتدا خالین و یک template خام هست (مثلا همه picturebox هاش خالین و عکسی توش نیست)
2- یک فایل کمکی که حاوی آدرس فایل های media ای هست که قراره در این cd آموزشی نشون داده بشن.

نحوه کار:
template شما طوری نوشته بشه که محتوای هر کنترل بصورت داینامیک load بشه (به جای اینکه خود اون کنترل از نو ساخته بشه)

یک مثال ساده میزنم تا واضح بشه توضیحاتم:

Template:
یک فرم هست که یک picturebox داره.
یک Property از نوع String داره مثلا به اسم ImageFilePath.
و در رویداد form_load اینطور نوشتید که مقدار ImageFilePath از فایل کمکی خونده میشه و عکس موجود در آدرس ImageFilePath در picturebox نشون داده بشه.
بعد از اینکه template رو به این شکل طراحی کردید اونو کامپایل کرده و فایل Exe اونو کنار برنامه اصلی قرار میدین.

فایل کمکی:
یک فایل Text هست که توش مثلا یک همچین چیزی داریم: Image=\images\image1.png

برنامه اصلی که باهاش cd آموزشی رو می سازین:
فایل exe همه template مورد نظر رو داخل یک فولدری کنارش قرار دادین.
کاربر میاد Template رو انتخاب میکنه.
یک عکس از Template رو میبینه که بدونه چی شکلی خواهد شد خروجی نهایی.
تصویر مورد نظر برای نشون داده شدن در Template رو انتخاب میکنه (از طریق file browser).
در این حال فولدر ایجاد میشه به اسمی که کاربر تعیین می کنه و فایل exe قالب (template) به اون فولدر کپی میشه. بعد فایل کمکی مربوطه در همون فولدر ایجاد میشه و تصویر انتخاب شده به فولدرimages (داخل همان فولدر) کپی میشه.
حالا آدرس تصویر کپی شده در داخل فایل کمکی قرار میگیره.

و کار انجام شد.

وقتی کاربری برنامه آموزشی را ار روی cd اجرا میکنه کدهای مربوط به form_load مربوط به template اجرا میشن و آدرس تصویر از فایل کمکی خوانده شده و در picturebox نمایش داده خواهد شد.

این یک مثال کاملا ساده بود که روش کلی بیاد دستتون.

برای کلیه موارد دیگه که تو template هاتون هست مثل فیلم و نوشته و ... میشه باز هم به همین شیوه عمل کرد.
اگر سوالی بود بفرمایید تا به کمک دوستان راهنمایی کنیم.

موفق باشید