דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. הכנסת פונקציה (private void) לX וגישה אליה בהמשך (לחצן לביצוע חוזר)

הכנסת פונקציה (private void) לX וגישה אליה בהמשך (לחצן לביצוע חוזר)

מתוזמן נעוץ נעול הועבר תכנות
7 פוסטים 3 כותבים 185 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • M מנותק
    M מנותק
    mekev
    כתב ב נערך לאחרונה על ידי
    #1

    הגדרת הצורך:
    ביצוע לחצן 'ריענון' למסך דוחות

    (תיאור: סביבת פיתוח C# - WINFORM
    יש menuStrip של דוחות שונים, לפי טווח תאריכים שבוחר המשתמש
    ואני מעוניין שכאשר נבחר טווח תאריכים חדש
    המשתמש יכול ללחוץ על ה'רענון' והדוח יופק מחדש (במקום כיום שיש לבצע שוב בחירה בלשונית>תת לשונית)
    סטריפ.PNG
    )

    הגדרת (חוסר) ידע נוכחי:

    לעבוד ארוך ועקום בצורה if>else וכו' לא מומלץ במקרה דנן

    (חשבתי לחפש את הפונקציה האחרונה שרצה, אבל זה אינו נכון
    כי עלול להתבצע בינתיים פונקציות אחרות באותו namespace במקום אחר)

    היות וC# זה שפה מונחת עצמים
    הגיוני שאמור להיות דרך
    להוסיף בכל Click הכנסה של שם הפונקציה הנוכחית (ToolStripMenuItem9_Click) ל'משתנה'/פונקציה
    ובכל לחיצה על הלחצן ריענון, הוא יבצע את הפונקציה השמורה

    אשמח לעזרתכם

    OdedDvirO תגובה 1 תגובה אחרונה
    0
    • OdedDvirO מנותק
      OdedDvirO מנותק
      OdedDvir
      השיב לmekev ב נערך לאחרונה על ידי
      #2

      @mekev אמר בהכנסת פונקציה (private void) לX וגישה אליה בהמשך (לחצן לביצוע חוזר):

      להוסיף בכל Click הכנסה של שם הפונקציה הנוכחית (ToolStripMenuItem9_Click) ל'משתנה'/פונקציה
      ובכל לחיצה על הלחצן ריענון, הוא יבצע את הפונקציה השמורה

      לדעתי זו הדרך הפשוטה.

      M תגובה 1 תגובה אחרונה
      0
      • M מנותק
        M מנותק
        mekev
        השיב לOdedDvir ב נערך לאחרונה על ידי
        #3

        @OdedDvir
        זה היה השאלה....
        איך כותבים דבר כזה....
        זה מה שניסיתי ולא הצלחתי (להכניס/לגשת למשהו כזה)

        dovidD תגובה 1 תגובה אחרונה
        0
        • OdedDvirO מנותק
          OdedDvirO מנותק
          OdedDvir
          כתב ב נערך לאחרונה על ידי OdedDvir
          #4

          אתה יכול ליצור מחלקה סטטית שמפיקה דוחות, ומכילה מילון של כל הפונקציות האפשריות, ולהשתמש בה בכל פעם שאתה מפיק דוח.
          באיזה פריימוורק אתה משתמש, Core או Standard?

          M תגובה 1 תגובה אחרונה
          1
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            השיב לmekev ב נערך לאחרונה על ידי
            #5

            @mekev הטיפוס delegate הוא המתאים לפי הספר ולפי הOOP.
            אבל זה מסורבל, ואפשר להשתמש בטיפוסים מסוג deleghate ישירות.
            הטיפוסים הם:

            Action - עבור מתודת void עם 0 או יותר פרמטרים (למשל Action<int, string> זה עם שניים.
            Func - עבור פונקציה שמחזירה ערך, ומקבלת 0 או יותר פרמטרים (הפרמטר הגנרי האחרון/היחיד הוא הטיפוס של הערך החוזר). דוגמה:

                Action lastAction = null;
            
                void ToolStripMenuItem9_Click(object sender, EventArg e){
                     lastAction = () => ToolStripMenuItem9_Click(sender, e);
                     //...
                }
            

            אבל אתה תצטרך לעשות את זה בכל מתודה, וזה לא dry בכלל.
            לכן אתה צריך שכל הToolStripMenuItem יהיו עם אותה פונקציה מטפלת והיא תשלח לדוח המתאים בהתאם לשם של הsender וכדומה. במקרה הזה יהיה גם הרבה יותר פשוט לטפל במקרה של "ביצוע חוזר" כי אפשר לאחסן את השם של השולח האחרון במשתנה string פשוט ולהפעיל בדיוק באותו אופן של הפעם הראשונה אבל עם פרמטר של המשתנה הזה.

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            3
            • M מנותק
              M מנותק
              mekev
              השיב לOdedDvir ב נערך לאחרונה על ידי
              #6

              @OdedDvir אמר בהכנסת פונקציה (private void) לX וגישה אליה בהמשך (לחצן לביצוע חוזר):

              באיזה פריימוורק אתה משתמש, Core או Standard?

              Core

              OdedDvirO תגובה 1 תגובה אחרונה
              0
              • OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                השיב לmekev ב נערך לאחרונה על ידי OdedDvir
                #7

                @mekev חשבתי על משהו כזה:

                public class ReportsStore
                {
                    private Dictionary<string, Delegate> _reports = new Dictionary<string, Delegate>();
                    private string _lastInvoked = "";
                
                    public ReportsStore()
                    {
                        _reports["Sales"] = GenSalesReport;
                        _reports["Clients"] = GenClientsReport;
                    }
                
                    public void Invoke(string name, params object?[]? args)
                    {
                        _lastInvoked = name;
                        _reports[name].DynamicInvoke(args);
                    }
                
                    public void InvokeLast()
                    {
                        Invoke(_lastInvoked);
                    }
                    public void GenSalesReport(DateTime date)
                    {
                        // Do your stuff for this report
                        Console.WriteLine($"Sales report for {date}");
                    }
                
                    public void GenClientsReport(string clientName)
                    {
                        // Do stuff for this report
                        Console.WriteLine($"Client report for {clientName}");
                    }
                }
                
                // Usage:
                ReportsStore reports = new ReportsStore();
                reports.Invoke("Sales", DateTime.Now);
                reports.Invoke("Client", "Avraham");
                
                תגובה 1 תגובה אחרונה
                4
                • dovidD dovid העביר נושא זה מ-תכנות ב-

                בא תתחבר לדף היומי!
                • התחברות

                • אין לך חשבון עדיין? הרשמה

                • התחברו או הירשמו כדי לחפש.
                • פוסט ראשון
                  פוסט אחרון
                0
                • דף הבית
                • קטגוריות
                • פוסטים אחרונים
                • משתמשים
                • חיפוש
                • חוקי הפורום