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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. מעשה מטופס

מעשה מטופס

מתוזמן נעוץ נעול הועבר ארכיון code613m
5 פוסטים 3 כותבים 421 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • avrahamA מנותק
    avrahamA מנותק
    avraham
    כתב ב נערך לאחרונה על ידי
    #1

    שבנוי ב WPF, ובו 3 קבוצות של כפתורי רדיו, הבחירה של המשתמש מכל קבוצה אמורה להשלח לשרת בסיום התהליך.
    האתגר הוא לקלוט את הבחירה של המשתמש וליצור ממנה את המחרוזת הסופית.
    כרגע זה כתוב כך:

    <RadioButton GroupName="0" Tag="one"/>
    <RadioButton GroupName="0" Tag="two"/>
                
    <RadioButton GroupName="1" Tag="one"/>
    <RadioButton GroupName="1" Tag="two"/>
                
    <RadioButton GroupName="2" Tag="one"/>
    <RadioButton GroupName="2" Tag="two"/>
    

    ובקוד האחורי יש מערך בן 3 איברים, וכל בחירה של המשתמש קוראת לפונקציה שניגשת למערך לפי האינדקס של הגרופ ניים, ומכניסה לו את הערך של ה tag של הכפתור רדיו, משהו כזה:

    string[] formData = new string[3];
    private void setFormData(object sender, RoutedEventArgs e)
            {
                var radioButton = sender as RadioButton;
                formData[Int32.Parse(radioButton.GroupName)] = radioButton.Tag;
            }
    

    זו דרך קצרה, אבל הכל אנונימי, אי אפשר לקרוא למשתנה בשם הגיוני, ולא להגדיר את הגרופ ניים עם שם הגיוני. צריך לזכור בעל פה מה כל אינדקס במערך מסמל.
    מה הדרך הכי נקיה לעשות את זה?

    פורסם במקור בפורום CODE613 ב21/04/2017 03:23 (+03:00)

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

      היה ברור לי שהכיוון הוא ListBox (=רשימת ערכים, עם אפשרות בחירה של אחד מהם) אבל לקח לי זמן למצוא איך כדאי.

      בסוף יצא לי ככה, שתי סטיילים (לשים בריסורס של החלון או האפליקציה):

      <Style TargetType="ListBoxItem" x:Key="asCheckBox">
          <Style.Setters>
              <Setter Property="Template">
                  <Setter.Value>
                      <ControlTemplate TargetType="ListBoxItem">
                          <CheckBox Margin="8,0" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected, Mode=TwoWay}" Content="{TemplateBinding Content}"  />
                      </ControlTemplate>
                  </Setter.Value>
              </Setter>
          </Style.Setters>
      </Style>
      <Style TargetType="ListBox" x:Key="listChecks" >
          <Setter Property="ItemsPanel">
              <Setter.Value>
                  <ItemsPanelTemplate>
                      <StackPanel Orientation="Horizontal" />
                  </ItemsPanelTemplate>
              </Setter.Value>
          </Setter>
      </Style>
      

      וכעת הListBox ככה:

      <ListBox x:Name="fruitsList" SelectedValuePath="Tag" Style="{StaticResource listChecks}">
          <ListBoxItem Tag="a" Style="{StaticResource asCheckBox}">תפוז</ListBoxItem>
          <ListBoxItem Tag="b" Style="{StaticResource asCheckBox}">תפוח</ListBoxItem>
          <ListBoxItem Tag="c" Style="{StaticResource asCheckBox}">שתיהם</ListBoxItem>
      </ListBox>
      

      ובקוד ככה:

      var selected = fruitsList.SelectedValue?.ToString();
      

      פורסם במקור בפורום CODE613 ב21/04/2017 04:22 (+03:00)

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

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

      תגובה 1 תגובה אחרונה
      3
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        למה עשיתי רדיו ולא צ'קבוקס? סיבוך. כי ברדיו, לחיצה נוספת עליו לא מכבה אותו אלא לחיצה על "חבירו לתא". ומה זה חבירו? או שהם באותו קונטיינר, או שהם חולקים את אותו GroupName.
        כעת הבעיה שעצמים של הליסט לא נמצאים ישירות באותו קונטיינר (הם עטופים בListBoxItem), ומאידך לפי שם זה ישתבש ברגע שיהי עוד ליסט אם הטמפלט הזה בחלון - לחיצה על כל פריט תכבה את הבחור בליסט השני...

        פורסם במקור בפורום CODE613 ב21/04/2017 04:26 (+03:00)

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

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

        תגובה 1 תגובה אחרונה
        2
        • רחמיםר מנותק
          רחמיםר מנותק
          רחמים מורחק
          כתב ב נערך לאחרונה על ידי
          #4

          @avraham

          שבנוי ב WPF, ובו 3 קבוצות של כפתורי רדיו, הבחירה של המשתמש מכל קבוצה אמורה להשלח לשרת בסיום התהליך.
          האתגר הוא לקלוט את הבחירה של המשתמש וליצור ממנה את המחרוזת הסופית.
          כרגע זה כתוב כך:

          <RadioButton GroupName="0" Tag="one"/>
          <RadioButton GroupName="0" Tag="two"/>
                      
          <RadioButton GroupName="1" Tag="one"/>
          <RadioButton GroupName="1" Tag="two"/>
                      
          <RadioButton GroupName="2" Tag="one"/>
          <RadioButton GroupName="2" Tag="two"/>
          

          ובקוד האחורי יש מערך בן 3 איברים, וכל בחירה של המשתמש קוראת לפונקציה שניגשת למערך לפי האינדקס של הגרופ ניים, ומכניסה לו את הערך של ה tag של הכפתור רדיו, משהו כזה:

          string[] formData = new string[3];
          private void setFormData(object sender, RoutedEventArgs e)
                  {
                      var radioButton = sender as RadioButton;
                      formData[Int32.Parse(radioButton.GroupName)] = radioButton.Tag;
                  }
          

          זו דרך קצרה, אבל הכל אנונימי, אי אפשר לקרוא למשתנה בשם הגיוני, ולא להגדיר את הגרופ ניים עם שם הגיוני. צריך לזכור בעל פה מה כל אינדקס במערך מסמל.
          מה הדרך הכי נקיה לעשות את זה?

          במקום מערך שים מאחורה מופע של מחלקה עם 3 מאפיינים בוליאניים עם שם הגיוני, ותעשה בינדינג בין רדיו אחד בכל קבוצה לבין מאפיין אחד במחלקה הנ"ל. בסוף כשתרצה שהכל יעלה לשרת פשוט תשתמש בסריאליאזר מוכן שיהפוך לך כל מחלקה לJSON בשורה אחת. ראה כאן
          http://www.newtonsoft.com/json

          פורסם במקור בפורום CODE613 ב21/04/2017 12:51 (+03:00)

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

            @רחמים

            במקום מערך שים מאחורה מופע של מחלקה עם 3 מאפיינים בוליאניים עם שם הגיוני, ותעשה בינדינג בין רדיו אחד בכל קבוצה לבין מאפיין אחד במחלקה הנ"ל.

            הרי הסריאליזר יוציא OptionA=true;OptionB=false;OptionC=false, ולא ידוע לי מהשאלה אם צד השרת יכול להתמודד עם זה. במילים אחרות השאלה תישאר במקרה שאתה צריך דוקא להוציא טקסט בהתאם לבחירה.
            משהו בסגנון

            if(myXyz.OptionA) return "OptionA";
            if(myXyz.OptionB) return "OptionB";
            

            זה מסורבל קצת.
            במידה וכתובים קוד מאחורה הייתי עושה מאפיין מסוג Enum ובינדינג עם קונוורטר לכל רדיו. אבל גם בכתיבת קוד הכי ראוי בעיני זה List שהSelectionItem שלו מאוגד למאפיין טקסט או Enum.

            פורסם במקור בפורום CODE613 ב21/04/2017 14:23 (+03:00)

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

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

            תגובה 1 תגובה אחרונה
            3

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

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

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