تور لحظه آخری
امروز : پنجشنبه ، 13 دی 1403    احادیث و روایات:  پیامبر اکرم (ص):همه گناهان گذشته كسى كه از روى ايمان و براى رسيدن به ثواب الهى معتكف شود، آمرزي...
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

صرافی ارکی چنج

صرافی rkchange

سایبان ماشین

دزدگیر منزل

اجاره سند در شیراز

armanekasbokar

armanetejarat

صندوق تضمین

Future Innovate Tech

پی جو مشاغل برتر شیراز

خرید یخچال خارجی

موسسه خیریه

واردات از چین

حمية السكري النوع الثاني

ناب مووی

دانلود فیلم

بانک کتاب

دریافت دیه موتورسیکلت از بیمه

طراحی سایت تهران سایت

irspeedy

درج اگهی ویژه

تعمیرات مک بوک

دانلود فیلم هندی

قیمت فرش

درب فریم لس

خرید بلیط هواپیما

بلیط اتوبوس پایانه

تعمیرات پکیج کرج

لیست قیمت گوشی شیائومی

خرید فالوور

پوستر آنلاین

بهترین وکیل کرج

بهترین وکیل تهران

خرید از چین

خرید از چین

تجهیزات کافی شاپ

خرید سرور اچ پی ماهان شبکه

کاشت ابرو طبیعی و‌ سریع

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

لوله و اتصالات آذین

قرص گلوریا

نمایندگی دوو در کرج

دوره آموزش باریستا

مهاجرت به آلمان

بهترین قالیشویی تهران

بورس کارتریج پرینتر در تهران

تشریفات روناک

نوار اخطار زرد رنگ

ثبت شرکت فوری

تابلو برق

خودارزیابی چیست

فروشگاه مخازن پلی اتیلن

قیمت و خرید تخت برقی پزشکی

کلینیک زخم تهران

خرید بیت کوین

خرید شب یلدا

پرچم تشریفات با کیفیت بالا و قیمت ارزان

کاشت ابرو طبیعی

پرواز از نگاه دکتر ماکان آریا پارسا

پارتیشن شیشه ای اداری

اقامت یونان

خرید غذای گربه

رزرو هتل خارجی

تولید کننده تخت زیبایی

مشاوره تخصصی تولید محتوا

سی پی کالاف

دوره باریستا فنی حرفه ای

چاکرا

استند تسلیت

تور بالی نوروز 1404

سوالات لو رفته آیین نامه اصلی

کلینیک دندانپزشکی سعادت آباد

پی ال سی زیمنس

دکتر علی پرند فوق تخصص جراحی پلاستیک

تجهیزات و دستگاه های کلینیک زیبایی

 






آمار وبسایت

 تعداد کل بازدیدها : 1849155185




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

چند مشکل در visual #c -


واضح آرشیو وب فارسی:سایت ریسک: چند مشکل در visual #c ali_tavanaie 13 دي 1389, 20:33سلام من مدتیه که با ویژوال سی شارپ برنامه می نویسم ، و چندین منبع و msdn رو زیر و رو کردم ، اما جواب مناسبی پیدا نکردم. اما سوال های من : 1- زمانی که یک شکل گرافیکی رو رسم می کنم ، هنگامی که یک صفحه دیگه از روی برنامه من عبور می کنه ، اون مقدار از drawing من پاک میشه و باید دوباره رسمش کنم.چه کر کنم که این مشکل برطرف شه. 2-چند عدد عکس دارم که می خوام با تغییر یک فیلد دیگه در یک picturebox لود بشن ، به resource ها هم اضافه کردم ، اما باز هم هنگامی که می خوام به picturebox نسبت بدم ارور می ده ، میخواستم بدونم روال اصلی این کار چه جوریه. سوال باز هم دارم ، اما تا اینجا ببینیم چی پیش میاد. the_king 13 دي 1389, 23:32سلام من مدتیه که با ویژوال سی شارپ برنامه می نویسم ، و چندین منبع و msdn رو زیر و رو کردم ، اما جواب مناسبی پیدا نکردم. اما سوال های من : 1- زمانی که یک شکل گرافیکی رو رسم می کنم ، هنگامی که یک صفحه دیگه از روی برنامه من عبور می کنه ، اون مقدار از drawing من پاک میشه و باید دوباره رسمش کنم.چه کر کنم که این مشکل برطرف شه. لطفا هر سوال رو در یک تاپیک جداگانه مطرح کنید، اینطوری می توانید در عنوان تاپیک دقیقا موضوع سوال تون رو بنویسید و برای سایر کاربران که ممکنه مشکلی نظیر مشکل شما رو داشته باشند پیدا کردن تاپیک مورد نظر ساده تر میشه. در سیستم عامل ویندوز زمانی که در حالت عادی روی یک پنجره چیزی ترسیم میشه صرفا در حافظه بافر (Buffer) موقتی ثبت میشه که مستقیما توسط کارت گرافیکی نمایش داده میشه، این حافظه کل صفحه نمایش رو پوشش میده و ممکنه هر لحظه توسط یک تغییر در آرایش صفحه و یا یک پنجره جدید ترسیم قبلی رو حذف کنه. این نوع نمایش به دلیل عدم نیاز به یک حافظه Bitmap اضافی هم سرعت اجرای زیادی داره و هم حافظه کمی از سیستم اشغال میشه. اما همانطور که اشاره کردید هم مشکل از بین رفتن ترسیم پیش میاد و هم اگه بخواهید برای جبران این مشکل اون ترسیم رو مجددا و بارها و بارها انجام دهید حالت پر پر زدن پنجره (Flicker) کاربر رو آزار میده. برای رفع این مورد نیاز به یک حافظه بافر اضافی است که به اصطلاح بهش بافر مضاعف یا Double Buffer می گویند. این حافظه اضافی هر آنچه که شما در پنجره ترسیم می کنید را ابتدا در خودش ذخیره کرده و سپس به بافر اصلی انتقال می دهد. هر بار که پنجره جابجا میشه و نیاز به ترسیم مجدد پنجره هست، اون بافر همچنان ترسیم قبلی رو در حافظه اش داره و به صفحه نمایش انتقال میده. چنین شیوه ای کمی کند تر است، اما هیچگاه پنجره پرپر نمی زند و به اصطلاح Flicker Free است. برای ایجاد کردن چنین حالتی در #C از شیوه زیر استفاده می کنیم : یک بافر می سازیم و از PictureBox می خواهیم که هر بار خواست خودش را Paint کند، محتویات بافر را در خود نمایش دهد. خودمان هر بار که قصد ترسیم چیزی را داشتیم بجای آنکه مستقیما در PictureBox رسم کنیم در buffer ترسیم اش کرده و سپس PictureBox را از تغییر کردن محتویات بافر با خبر می کنیم تا نمایش دهد. چون بافر در کلاس تعریف می شود، تا زمانی که فرم بسته نشده محتویات داخلش را حفظ می کند و چیزی از ترسیم های ما حذف نمی شود. ابتدای کد فرم یک buffer از کلاس BufferedGraphics برای نگهداری ترسیم ها تعریف می کنیم : public partial class Form1 : Form { private BufferedGraphics buffer; public Form1() { InitializeComponent(); } زمانی که فرم Load می شود این بافر را ایجاد می کنیم، پس بایستی برای رخداد مربوطه کد نویسی کنیم : private void Form1_Load(object sender, EventArgs e) { Rectangle bounds = pictureBox1.Bounds; BufferedGraphicsContext bufferedContext = BufferedGraphicsManager.Current; buffer = bufferedContext.Allocate(pictureBox1.CreateGraphic s(), bounds); buffer.Graphics.FillRectangle(Brushes.White, bounds); } کد بالا بافر را ایجاد می کند، چون رنگ پیشفرض در بافر 0 (مشکی است) یک دستور FillRectangle به آن اضافه کردم تا رنگ زمینه را به سفید تغییر دهد. رخداد ترسیم شدن PictureBox هم بایستی محتویات این بافر ما را روی صفحه نمایش دهد : private void pictureBox1_Paint(object sender, PaintEventArgs e) { buffer.Render(e.Graphics); } دقت کنید که از این به بعد برای ترسیم در PictureBox مستقیما از e.Graphics یا pictureBox1.CreateGraphics() استفاده نکنید چون آنها کاری با بافر ما ندارند و ترسیم ها در حافظه buffer ذخیره نمی گردند. بجایش برای رسم هر چیزی در PictureBox از buffer.Graphics استفاده کنید ، مثلا کد زیر یک خط با مختصات تصادفی را در buffer ترسیم کرده و سپس PictureBox را مجبور به ترسیم مجدد بافر می کند (Invalidate) Random rnd = new Random(); Point p1 = new Point(rnd.Next(pictureBox1.Width), rnd.Next(pictureBox1.Height)); Point p2 = new Point(rnd.Next(pictureBox1.Width), rnd.Next(pictureBox1.Height)); buffer.Graphics.DrawLine(Pens.Black, p1, p2); pictureBox1.Invalidate(); توجه داشته باشید که بافر بصورت مستقیم به PictureBox وصل نیست و اگر ترسیمی در آن انجام شود PictureBox بلافاصله با خبر نمی شود. پس اگر چیزی در buffer رسم کردید بایستی برای نمایش آن به PictureBox فرمان Invalidate را بدهید، این کار عملا موجب فراخوانی رخداد Paint می شود. کد کامل پروژه ضمیمه این پست می باشد. the_king 13 دي 1389, 23:532-چند عدد عکس دارم که می خوام با تغییر یک فیلد دیگه در یک picturebox لود بشن ، به resource ها هم اضافه کردم ، اما باز هم هنگامی که می خوام به picturebox نسبت بدم ارور می ده ، میخواستم بدونم روال اصلی این کار چه جوریه. سوال باز هم دارم ، اما تا اینجا ببینیم چی پیش میاد. نمی دونم دقیقا از چه شیوه ای برای نمایش تصویر ها استفاده می کنید، به هر حال اگر در منوی Project گزینه xxxx Properties (عبارت xxxx نام پروژه شما است) را انتخاب کنید در بخش Resources می توانید از دکمه Add Resource و سپس Add Existing File استفاده کرده و فایل های مورد نظرتون رو به پروژه اضافه کنید. اکنون با عبارت Properties.Resources در کدتان به محتویات اضافه شده دسترسی دارید و مثلا اگر تصویری با عنوان Question.png رو اضافه کرده اید، Properties.Resources.Question تصویر مورد نظر است و با کدی شبیه به کد زیر می توانید آنرا در PictureBox نمایش دهید : pictureBox1.Image = Properties.Resources.Question; کد کامل پروژه نمونه ضمیمه این پست می باشد. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1332]

bt

اضافه شدن مطلب/حذف مطلب







-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن