פוקוס על כפתור לא עובד

  • הוסף לסימניות
  • #1
בעזהי"ת

בתוכנה שבנויה ב-c# winforms. נפתחת חלונית עם כפתורים. בזמן הפתיחה יש כמה פעולות וכשהן נגמרות כפתור אחד צריך להיות מסומן. אני עושה
קוד:
btn.focus();
ב-load, לפני הפעולות, אחרי הפעולות, והוא לא שם עלי! אני עובר בדיבאג, עובר על השורות האלה והוא מבצע אותן, אבל focused נשאר false.
 
  • הוסף לסימניות
  • #2
עדין רלוונטי?
יתכן שזה קורה מכיון שהוא עוד לא טען את הטופס.
ניסתי עכשיו לעשות את זה בלי ועם טיימר.
עם עשיתי ממש בעת הטעינה, לא עבד, אבל אם הפעלתי באמצעות טיימר, עבד מצוין.
מצרפת כאן את דוגמת הקוד.
קוד:
private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enabled=true;
        }

כאשר את מרווח הזמן השארתי כמו ברירת המחדל-100 MS
ובארוע של TICK לTIMER כתבתי את הקוד הבא
קוד:
private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Enabled = false;
            button2.Focus();
        }

בהצלחה.
 
  • הוסף לסימניות
  • #3
יתכן שזה קורה מכיון שהוא עוד לא טען את הטופס.
ניסתי עכשיו לעשות את זה בלי ועם טיימר.
אם עשיתי ממש בעת הטעינה, לא עבד, אבל אם הפעלתי באמצעות טיימר, עבד מצוין.
נפלאות הבריאה. לראות ולא להאמין.

כרגע שיניתי את ה-tab stop של תיבת הטקסט שהוא כן עמד עליה ל-false, והוא נאלץ בעל כרחו לגלוש אל הכפתור הרצוי. אם אצטרך בעתיד גישה גם לטקסט ההוא אוכל להשתמש בטיימר. ואולי גם שינוי ה-tab index יעזור? צ"ב.
 
  • הוסף לסימניות
  • #4
אפשרות יותר פשוטה מטיימר, זה לקרוא ל ()btn.Select, שאפשרות זו תעבוד אפילו ב Constructor או ב OnLoad.

והשאלות העולות מאליהן, מה ההבדל בין השניים ולמה זה עובד? אז focus זו הגדרה כללית לכל המערכת הפעלה, שזה האובייקט שמקבל את הevents של המקלדת (הקלדה, אנטר וכיו"ב), מה שאין כן לselect שזו הגדרה פנימית של ה Form למה שמסומן (לצורך הענין, מספר פריטים ברשימה יכולים להיות selected).

לפי זה, כאשר ה Form נטען (ב constructor או ב OnLoad), הוא עוד לא מוצג ולכן אף Control בForm לא יכול לבקש מהווינדוס להיות ה Focused, שהרי ברגע זה, לחיצה על מקש במקלדת לא תגרום לשום פעולה (אם אין Textbox או Button, אין משמעות ללחיצה). ממילא, קריאה ל Focus בשלבב זה, לא תעשה כלום (ולמעשה, תחזיר false).

אבל select זוהי הגדרה לוגית ל Form, לכן, אפילו שה Control עוד לא מוצג, ניתן להגדיר אותו כSelected וממילא כאשר יוצג ה Form, הוא יהפוך את ה Control המדובר ל Focused.
 

פרוגבוט

תוכן שיווקי
פרסומת

פוסטים חדשים שאולי לא קראת....

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה