نمایش نتایج 1 تا 3 از 3

نام تاپیک: مشکل فراخوانی تابع

  1. #1

    مشکل فراخوانی تابع

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

    Private Shared Sub PrintDoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDoc.PrintPage


    End Sub



    حالا وسط این برنامه من اون تابع رو برای تبدیل تاریخم به شمسی فرا می خونم. اما خطا میده و زیرش خط میکشه و این خطا رو میده:


    cannot refer to an instance member of a class from within a shared method

    مشکل از کجاست؟

  2. #2

    نقل قول: مشکل فراخوانی تابع

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

    Private Shared Sub PrintDoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDoc.PrintPage


    End Sub



    حالا وسط این برنامه من اون تابع رو برای تبدیل تاریخم به شمسی فرا می خونم. اما خطا میده و زیرش خط میکشه و این خطا رو میده:


    cannot refer to an instance member of a class from within a shared method

    مشکل از کجاست؟
    مشکل از اینجا است که یک متد Shared به نام PrintDoc_PrintPage میخواد داخلش متدی رو فراخوانی کنه که Shared نیست.
    فرض کنیم که شما یک کلاس فرم دارید، مثلا Form1 که داخلش یکسری متد ها و فیلد ها و مشخصه ها هست.
    شما می توانید از این فرم چهار تا شیء بسازید و همزمان چهار تا Form1 رو نمایش بدهید، این چهار تا فرم هر کدوم یک شیء مجزا هستند، ولی خود Form1 یک کلاس بیشتر نیست، هیچوقت دو کلاس Form1 نمیشه، اما تعداد اشیاء که از کلاس Form1 می سازید محدودیتی نداره، میتونه صفر تا باشه، میتونه ده تا باشه.

    متد ها و فیلد ها و مشخصه های داخل این کلاس Form1 به دو گروه تقسیم می شوند، یک گروه شون Shared (اشتراکی) هستند و بقیه Shared نیستند.
    اونها که مثل PrintDoc_PrintPage ئه Shared هستند متعلق به خود کلاس اند، نه اشیاء کلاس. یعنی وجودشون به اشیاء کلاس وابسته نیست.
    کاری به این ندارند که شما اصلا از Form1 شیء ساخته اید یا نه، یکی ساخته اید، یا چهار تا. اونها متعلق به خود کلاس Form1 هستند و همیشه وجود دارند و با به اشیاء فرم متعلق نیستند.
    اگر شما چهار تا شیء از Form1 هم ساخته باشید، متد PrintDoc_PrintPage همون یکی میمونه و تکثیر نمیشه. برای همین بهشون میگن Shared یعنی اشتراکی.

    اما اونها که مثل Button1 روی فرم Shared نیستند، متعلق به اشیاء کلاس اند، نه خود کلاس. یعنی وجودشون به اشیاء کلاس وابسته است، اگر شیء ای در کار نباشه وجود ندارند.
    اگر شما از Form1 شیء نساخته باشید اصلا Button1 ای وجود نداره. اگر چهار تا شیء از Form1 ساخته باشید هر کدوم از اشیاء اون فرم یک Button1 برای خودش داره، مستقل از بقیه.

    حالا شما سعی کرده اید که داخل متد Shared ای به نام PrintDoc_PrintPage یک متدی که Shared نیست رو فراخوانی کنید، اما PrintDoc_PrintPage متعلق به هیچکدوم از اشیاء کلاس نیست، نمیدونه اون متدی که شما سعی در فراخوانی اش رو دارید متعلق به کدوم شیء ئه. تا وقتی ندونه که شما منظورتون کدوم شیء ئه نمیتونه اون متد رو فراخوانی کنه.

    اگر بتوانید اون متد دیگه رو هم Shared کنید مشکل به سادگی حل میشه، چون متد های Shared می توانند به اجزاء Shared دسترسی داشته باشند.
    اما اگر نتوانید، معنی اش اینه که باید به طریقی به PrintDoc_PrintPage اون شیء رو معرفی کنید تا بدونه متد مورد نظر داخل کدوم شیء قرار داره.

  3. #3
    کاربر دائمی آواتار پرستو پارسایی
    تاریخ عضویت
    آبان 1392
    محل زندگی
    تهران
    پست
    454

    نقل قول: مشکل فراخوانی تابع

    با سلام از مطالب آموزنده شما سپاسگزارم برای من نکات جالبی داشت

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •