0 امتیاز

سلام. من تازه از طریق اموزش های سایت که از همین سایت تهیه کردم دارم سی شارپ رو یاد می کیرم. پس ببخشید سوالم زیاد اماتوری هست.

من برای تمرین میخواستم یه دکمه ایجاد کنم. یه event به دکمه دادم که بعدش dialog box باز میشه . یه عکس انتخاب بشه و سپس اون عکس توی فرم نمایش داده بشه.

        private void btnWatermark_Click(object sender, EventArgs e)
        {
            OpenFileDialog OpenFileDialogWatermark = new OpenFileDialog();
            OpenFileDialogWatermark.Title = "Selecte your Water Mark";
            OpenFileDialogWatermark.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            OpenFileDialogWatermark.Filter = "PNG File|*.png|JPEG Files|*.jpg";
            OpenFileDialogWatermark.FilterIndex = 1;
            DialogResult result = OpenFileDialogWatermark.ShowDialog();
            if (result == DialogResult.OK )
            {
                Stream waterMarkPath = OpenFileDialogWatermark.OpenFile();
                pictureBox1.ImageLocation = (string)waterMarkPath;
            }
      
        }

متغیر  Stream waterMarkPath الان ادرس فایل رو میگیره. ولی نمی دونم چطوری از طریق pixture box فراخونی ش کنم؟

بسته شده

1 پاسخ

+2 امتیاز
 
بهترین پاسخ
                pictureBox1.ImageLocation = Convert.ToString(waterMarkPath);

از کلاس convert استفاده کردم و مشکل حل شد.

ولی می خوام بدونم چ تفاوتی بین cast و convert هست که در چنین موردی، cast نمی تونه متغیر رو به استرینگ تبدیل کنه؟

بحثش طولانيه ولي يه مثال ميزنم:

اگه عدد 12.8 رو به int كست (cast) كني كامپايلر مياد و 12 رو برميداره و اعشار رو دور ميريزه و حاصل ميشه 12 و نوعي Truncate انجام ميشه
اما اگه ConvetToInt32 كني به عدد 13 گرد ميشه.

حالا بستگي به كاربردت داره. اگه دقت مهمه cast نكن ولي اگه دقت مهم نيست cast بهتره چون محاسبه اي نميكنه و قسمت اعشار رو ميريزه دور

 

میشه گفت چیزی که ازش به عنوان Cast یاد میشه فرض کردن یک type، به عنوان type دیگه ای هست (البته این تعریف بیشتر implicit cast رو شامل میشه).
به عنوان مثال اگر شما داده ای از نوع Char با مقدار '1' رو، به نوع Int دو بایتی Cast کنید حاصل عدد 49 خواهد بود!! و این به دلیل اینه که در کدگذاری ascii کاراکتر '1' رو با یک بایت به مقدار 49 کد می کنند و Cast عینا همین ساختار بایتی رو به عنوان Int در نظر میگیره و هیچ پردازش خاصی روش انجام نمیده؛ در حالیکه اگر شما همین مقدار '1' رو با Convert کردن به Int تبدیل کنید، مقدار عددی 1 رو خواهید داشت، به دلیل اینکه انتظار میره تا در Convert عملیات خاصی برای تبدیل مقدار یک نوع، به مقدار مناسب خودش در نوع دیگر صورت بگیره.

در Cast کمتر عملیات خاصی انجام میشه در حالی که ممکنه Convert نیاز به عملیات برای تبدیل یک Type به type دیگری رو داشته باشه.
با Cast می تونید Type های هم خانواده رو با هم تبدیل کنید ولی در Convert ممکنه دو Type کاملا متفاوت رو به هم تبدیل کنید و یا یک مقدار رو به یک مقدار دیگه از همون type تبدیل کنید (مثل تبدیل string به base64 و یا تبدیل عکس رنگی به سیاه و سفید).
برای مثال اگر شما یک object از نوع Bitmap رو بخواهید به Image تبدیل کنید در واقع یک Cast کرده اید ولی مثلا اگر یک Bitmap رو با عملیاتی شبیه به OCR تبدیل به متن کنید، مفهوم Convert رو پیاده سازی کردید.
در Cast شما محدود تر خواهید بود، چرا که باید دو نوع هم خانواده داشته باشیم (مثل Int و long) و یا دو نوع از نظر ساختار باینری شبیه به هم باشند (مثل Char و Int16) و یا تبدیل فرزند به پدر(Boxing) و یا بر عکس(unboxing)؛ در حالیکه Convert علاوه بر اینکه مفهوم Cast رو پوشش میده، بلکه میتونه هر چیزی رو به هر چیز دیگری تبدیل کنه.
با این تفاسیر رشته "1234" هرگز و به هیچ وجه به یک int16 قابل Cast نیست و همچنین عدد مثلا 16 به رشته "16 هیچ وقت Cast نمیشه، چرا که ساختار کاملا متفاوتی دارند (اگر چه از نظر ظاهری داده های متشابهی داشته باشند)؛ و این در حالیه که Convert کردن یک رشته به عدد و بر عکس یک امر بسیار معمول و پر کاربرد به شمار میاد.
توسط (3,483 امتیاز) 6 13 87
بی نهایت سپاسگذار از وقتی که گذاشتید.

خیلی توضیح جامعی بود.
توسط (192 امتیاز) 9
درود و افرین
توسط (7,164 امتیاز) 4 7 141
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,921 کاربر

دسته بندی ها

...