واضح آرشیو وب فارسی:سایت ریسک:
3Dmajid07-02-2010, 10:39 PMچه جوری میشه یه برنامه ی کنسول رو با یه فرم ارتباط داد ؟ اصلا میشه همچین کاری کرد ؟ میخوام یه برنامه باشه که تو صفحه ی کنسول کاربر دستور بنویسه و روی فرم یا یکی از کنترل های روی فرم اجرا بشه. مثلا فرض کنید هر وقت توی صفحه ی کنسول نوشت : "Change Color" رنگ پس زمینه ی فرم 1 رو عوض کنه. لطفا راهنمایی کنید :20: 3Dmajid08-02-2010, 02:53 PMکــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــمـــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــکـــــــــــــــــــــ ـــــــــــــــــــــــــ ـــ :42: :33: anvar.net08-02-2010, 11:09 PMیه جورایی میشه این کار ور کرد یه sample با وی بی 2005 کارت رو راه می اندازه http://up.iranblog.com/37261/1265737173.zip (http://up.iranblog.com/37261/1265737173.zip) 3Dmajid09-02-2010, 01:14 AMخیلی ممنون، ولی من با 2010 کار میکنم، نمیدونم چرا این پروژه های دات نت 2005 یا 2008 رو باز نمیکنه. همش صفحه ی Convert رو اولش واسم میاره، منم نکست میزنم و فینیش میکنم ولی بعد هیچ چی واسم باز نمیشه. اگه میشه یه مثال خیلی کوچیک با کد همینجا واسم بزن :20: _H2_09-02-2010, 01:27 PMسلام با اجازه جناب anvar.net ... چه جوری میشه یه برنامه ی کنسول رو با یه فرم ارتباط داد ؟ اصلا میشه همچین کاری کرد ؟ متاسفانه متاسفانه متاسفانه سوالت این تیپی و یا "چگونه میتوان از فرم 1 به فرم 2 دسترسی پیدا کرد!!!" و... مشکل ضعف در مفاهیم بنیادین شی گرایی (OOP) است. یعنی کسی که زره با مفاهیم شی گرایی (و ترجیحاً پلیمورفیزم) آشنایی داشته باشد اصلاً همچین سوالاتی به ذهنش خطور نمیکند. بحرحال اینجا که نمیتوان مفاهیم شی گرایی را یاد داد ... به کلیه دوستان VB.Net و C#.Net کار و کلاً برنامه نویسانی که همواره از این سوالات ربط دادنی در ذهنشان میچرخد پیشنهاد میکنم مطالعات خود را در ضمینه شی گرایی و پلیمورفیزم و کلمات کلیدی زبانی که کار میکنند افزایش دهند و صددرصد مطئن شوند همه کلمات کلیدی زبانی که کار میکنند را یاد گرفته اند. ((( مثلاً از کلمات مرتبط با شی گرایی در VB.Net (+کلاس+وراثت+چندریختگی+...) میتوان به موارد زیر اشاره کرد: Interface/Class/DirectCast/Friend/Implements/Inherits/Is/IsNot/Me/ MustInherit/MustOverride/MyBase/MyClass/New/Nothing/ NotInheritable/NotOverridable/Overloads/Overridable/Overrides/ Private/Property/Protected/Public/Shadows/Shared/TryCast ))) ===== و اما بحث شیرین جواب سریع ... :31: یک پروژه معمولی Console ایجاد کنید و Reference های System.Windows.Forms.dll و System.Drawing.dll را اضافه کنید. با کد ساده ای مثل این میتوانید فرم را نمایش دهید و کنترل کنید: (ولی برای حالت کاملتر استفاده از چند ریسمانی بهتر است) !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! ===== جمیعاً موفق باشید. 3Dmajid09-02-2010, 03:39 PMمتاسفانه متاسفانه متاسفانه سوالت اين تيپي و يا "چگونه ميتوان از فرم 1 به فرم 2 دسترسي پيدا کرد!!!" و... مشکل ضعف در مفاهيم بنيادين شي گرايي (OOP) است. يعني کسي که زره با مفاهيم شي گرايي (و ترجيحاً پليمورفيزم) آشنايي داشته باشد اصلاً همچين سوالاتي به ذهنش خطور نميکند. از اين لحاظ که ميشه اين کار رو کرد شک نداشتم ولي آخه من بدبخت چه جوري بدونم بايد System.Windows.Forms.dll و System.Drawing.dll اضافه کنيم :31: نکته ي اصلي همينجا بود فکر کنم، وگرنه اصلا نميشه. و اما بحث شيرين جواب سريع ... خيلي آسون بود :20: به قول شاعر ميگه : دست شما درد نکنه، از شما خيلي ممنونم اینقدر بدی کردی به من که دیگه عاشق نمونم :31: البته فقط مصرع اولی تقدیم به شما :11: ولي خب قسمتي از کد رو متوجه نشدم، يعني تو برنامه تونستم بفهمم چي کار ميکنه ولي نتونستم بفهمم واسه چيه :31: نميدونم فهميدي چي گفتم يا نه. مثلا اون حلقه ي اول DO while (True) که گذاشتي فکر کنم حلقه ي بي نهايته، يعني هميشه برنامه ادامه داشته باشه. ولي اين حلقه و کدها چه کاربردي دارن ؟ !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! وقتي اين کد نيست، موقع اجراي برنامه يه جورايي فرم هنگ ميکنه ... اين کد چي کار ميکنه که باعث جلوگيري از اين کار ميشه ؟ :20: راستی خيلي باحالي :40: چرا هر چي سوال ميکنيم بلدي جواب بدي ؟ :38: اينجوريشو ديگه نديده بودم :38: _H2_09-02-2010, 04:04 PMسلام آخه من بدبخت چه جوري بدونم بايد System.Windows.Forms.dll و System.Drawing.dll اضافه کنيم این مسئله خیلی مهمی نیست. میخواهید از کلاس های Form و Button و TextBox و... استفاده کنید اینها هم در System.Windows.Forms.dll است. اصلاً اگر یک Form هم به برنامه اضافه کنید این دو Reference خودکار اضافه میشود. شاید هم اصلاً بهتر بود میگفتم یک Form به برنامه اضافه کنید ... ( System.Drawing.dll هم برای داشتن Size و Point و Color و Font خودکار/دستی اضافه میشود ) وقتي اين کد نيست، موقع اجراي برنامه يه جورايي فرم هنگ ميکنه دقیقا درست است. هدف این حلقه رفع همین مشکل است. دلیل این مطلب به همان بحث ریسمان ها بر میگردد ... برنامه ما فقط با یک ریسمان شروع میشود. بدیهی است که این ریسمان فقط یک عمل را میتواند انجام دهد. در کد فوق برای سادگی و استفاده نکردن از چند ریسمانی آمدیم و کنترلر کنسول و فرم را با یک ریسمان انجام داده ایم. میخواهیم کاربر بتواند هم با کنسول کار کند و هم فرم ... خوب یک ریسمان میتواند جوابگوی یکی از این دو مبادی ورودی باشد و به فرامین کاربر در یکی از این دو مبادی جواب دهد و دستورات را اجرا کند. در واقع مشکل از متد ReadLine (در مقابل Show) شروع میشود. متد ReadLine ریسمان را بلوکه میکند و آنقدر منتظر میماند تا کاربر چیزی تایپ کند و Enter کند! نتیجتاً تا تایپ عبارت و زدن Enter ریسمان اینجا الاف (بلوکه) میماند بعد هم که ReadLine تمام شود اگر While اضافه فوق نباشد باز بلوکه ReadLine بعدی میشود ... خلاصه دیگر فرصتی برای اجرا و پردازش درخواست های صف پیغام های ویندوز شامل فرامین کاربر به فرم نمی ماند. (کلیک و حرکت و تغییر سایز و تایپ و...) ((( در واقع آنطرف صف پیغام های فرم دارد از تشنگی بی ریسمانی میمیرد این طرف ریسمان ما پشت ReadLine خوابش برده ... ))) ولی آن حلقه اضافه تا زمانی که کاربر چیزی در کنسول تایپ نکرده و دکمه ای زده نشده ریسمان را به پردازش DoEvents که همان سرکشی به صف پیغامهای ویندوز است راهنمایی میکند و در واقع چون متد Show داشتیم DoEvents باعث سرکشی و اجرای صف فرامین فرم میشود و فرم به جریان میافتند و اصطلاحاً بلوکه یا هنگ نمیکند. ===== این کد را هم همینطوری سریع نوشتم و ایرادات خاص خودش را دارد ... مثلاً شما یک دکمه در کنسول بزنید ولی Enter نکنید ... برنامه به ReadLine هدایت میشود و تا زمان Enter کردن در کنسول باز فرم بلوکه شده و هنگ میکند (چون تنها ریسمان برنامه اینطرف الاف یک Enter مانده !!! ((( البته اینکه مثال بود ورگنه حل کامل مشکل خدمت یک ریسمان در دو محل راحت قابل انجام است، کافی است حلقه کوچک داخلی به جای فشرده شدن هر کلید (KeyAvailable) منتظر رسیدن فشرده شدن Enter باشد یا حتی میتوان از دو ریسمان مجزا هم استفاده کرد. ))) موفق باشید. 3Dmajid09-02-2010, 07:34 PMاین مسئله خیلی مهمی نیست. میخواهید از کلاس های Form و Button و TextBox و... استفاده کنید اینها هم در System.Windows.Forms.dll است. اصلاً اگر یک Form هم به برنامه اضافه کنید این دو Reference خودکار اضافه میشود. شاید هم اصلاً بهتر بود میگفتم یک Form به برنامه اضافه کنید ... ( System.Drawing.dll هم برای داشتن Size و Point و Color و Font خودکار/دستی اضافه میشود ) خب من قبلا این کار رو کردم و کدش رو نوشتم ولی کد کار نمیکرد، گفتم شاید به خاطر این باشه ولی مثیکه اون دو تا حلقه ای که تو کد هست خیلی مهمه و تا اون دو تا حلقه نباشن کد تغییر رنگ اجرا نمیشه ... درسته ؟ خیلی ممنونم دوست عزیز ... :11: من دقیقا نمیدونم منظورت از ریسمان چیه ؟ همون رشته یا استرینگه ؟ _H2_10-02-2010, 05:12 PMسلام مثیکه اون دو تا حلقه ای که تو کد هست خیلی مهمه و تا اون دو تا حلقه نباشن کد تغییر رنگ اجرا نمیشه ... درسته ؟ وجود هر دو حلقه ها ضرروری است و به مباحث ریسمان ها مربوط میشود. من دقیقا نمیدونم منظورت از ریسمان چیه ؟ - ریسمان .. - بعضاً نخ هم ترجمه شده! - Thread - کلاس System.Threading.Thread تعداد ریسمان های در حال اجرا در رایانه همواره در TaskManagr و در بخش Performance نمایش داده میشود. ساختمال و ماهیت یک ریسمان خیلی فرق دارد با چیزی که میخواهم در زیر بگویم ولی شما میتوانید یک ریسمان را چنین فرض کنید: فرض و مثال دور از ذهنی نیست ولی با واقعیت تفاوتهایی دارد که مهم نیست! یک ریسمنان مثل یک کارگر میماند! یک فردی را یک سلسله کار را میتواند در CPU انجام دهد. شما میتوانید اینطوری فرض کنید که کسی یا چیزی که دستورات برنامه نویسی شده برنامه شما را در CPU اجرا میکند نامش ریسمان است! این مشتی ریسمان کارگر(:blink:) وظیفه اجرای خط به خط اپکدهای کامپایلی برنامه شما را به عهده میگیرد. وقتی روی فایل exe تان دبل کلیک میشود، ویندوز یک ریسمان کارگر برای برنامهع شما اختصاص میدهد و خط اول دستورات شما در تابع Main را به او میدهد و میگوید این را بگیر و اجرا کمن و برو تا آخرش ... ! در همه برنامه ها Sub Main اولین خطی است که این کارگر میبینید و از انجا شروع میکند و End Sub (همان Main) هم آخرین خط برنامه شما است که آن کارگر اجرایش میکند. وقتی این کارگر به End Sub (روال Main) میرسد به نزد هسته ویندوزجانش :31: برمیگردد و میگوید کارفلان برنامه تمام شد و دیگری کاری نداشت که انجام دهم! هسته ویندوز هم لطف میکند و کل حافظه بخش های به جا مانده برنامه شما را آزاد میکند و برنامه شما عملاً از RAM نابود میشود! ===== اگر به یک ریسمان به عنوان یک نفر، یک کارگر فکر کنید خیلی درک شرایط ساده میشود. در همین مثال قبلی اگر حلقه بزرگ اولی نباشد چه میشود؟ ریسمان ReadLine و BackColor را اجرا میکند و در کسری از میلی ثانیه به End Sub (روال Main) میرسد و کنترل به ویندوز برمیگردد! هسته CLR و بعد ان هسته ویندوز هم در کسری از ثانیه دخل برنامه تان را می آورد و تمام باقی مانده های آن را از RAM آزاد میکند و نتیجتاً فرم باز شده هم بسته میشود. باز در همان مثال قبلی اگر حلقه کوچکتری وسطی نباشد چه میشود؟ همان طورکه در پست قبلی هم گفتم ریسمان در حلقه اجرای While بزرگ گیر میافتد و وقتی برای سرکشی و اجرای فرامین موجود در صف پیام های ویندوز برای فرم نخواهد داشت. ولی حلقه کوچک و دستور DoEvents ان موجب میشود تا تایپ کاراکتری در کنسول ریسمال به کارهای صف ویندوز و نتیجاً Response دار کردن فرمی که نمایش داده شده هم برسد. ===== در یک برنامه با تسلط و اطلاع از شرایط چند ریسمانی و دقت به عدم تداخل کار ریسمان های مختلف و دسترسی به محل های مشترک و... میتوان به ویندوز درخواست داد و ریسمان جدیدی تولید کار و کاری را هم به این فرد یا کارگر جدید سپرد ... در واقع چند ریسمانی مثل بودن چند کارگر در یک محل است. در چند ریسمانی در هر لحظه دستورات بیش از یک نقطه برنامه اجرا میشود. یک کارگر میتواند متدی با نام Sub Test1 را شروع کند و خط به خط دستوراتش را اجرا کند تا به اخر برسد و یک کارگر دیگر در همان لحظه میتواند دستورات Sub Test2 را پیگیری و اجرا کند. ===== البته مجدداً تاکید میکنیم که مفهوم و ماهیت و بنیان ریسمان ها خیلی فرق دارد و در بستر مکانیزم سخت افزاری داخل CPU و سیستم عامل میتوان کامل تشریحش کرد. ولی فرض یک ریسمان با یک کارگر اجرا کننده دستورات برای برنامه نویسی عادی ساده و بلامانع است. موفق باشید. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1277]