פורסם 2011 בנובמבר 2513 שנים יש לי תוכנית שכתובה ב-WINFORM ואני רוצה שהיא תעשה פעולה מסויימת איך שהעכבר עוזב את התיבה ועובר לתיבה אחרת, אני יודע שיש אפשרות כזו אבל אני לא מוצא אותה.
פורסם 2011 בנובמבר 2513 שנים בתיבה אתה צריך להרשם ל-event בשם MouseLeave ולהכניס שם את הפעולה שאתה רוצה שתבוצע.
פורסם 2011 בנובמבר 2513 שנים מחבר אפשר בבקשה דוגמא על מה בדיוק להירשם ?זו המתודה שלי שעובדת בעקבות הלחיצה: private void button1_Click(object sender, EventArgs e) { long number = long.Parse(tbNumber.Text); Task<bool> CheckNumberTask = new Task<bool>(CheckIfPrime, number); CheckNumberTask.Start(); bool result = CheckNumberTask.Result; lbResult.Text += " " + result; }
פורסם 2011 בנובמבר 2513 שנים תלחץ על התיבה ואז בצד ימין אמור להיות לך חלונית PROPERTIESבחלק העליון יש אייקון של EVENTS - תלחץ עליו ויוצגו בחלונית כל ה-EVENTS שזמינים עבור התיבהתמצא את MOUSELEAVE ודבל קליק עליו ייצור לך את הפונקציה
פורסם 2011 בנובמבר 2513 שנים מחבר אז בעיקרון אני אמור לקחת את כל מה שרשום בקליק שרשמתי ולהעביר אותו לפונקציה החדשה ?
פורסם 2011 בנובמבר 2513 שנים מחבר יש לי בעיה קטנה, בעיקרון התוכנית מוצאת האם המספר בתיבה הוא ראשוני או לא ועכשיו אחרי כל הכנסה של מספר אני מקבל את התוצאה ולא רק אחרי שהסמן עובד לתיבה אחרת ככה שאם אני רוצה לבדוק מספר בן 5 ספרות אחרי כל לחיצה של ספרה הוא מתחיל לעבוד.
פורסם 2011 בנובמבר 2513 שנים לא הגיוני אם השתמשת באוונט שרשמתי.תעלה לפה את הקוד (כל האוונטים ) ונראה מה הבעיה
פורסם 2011 בנובמבר 2513 שנים מחבר using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading.Tasks;namespace T1124{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //long number = long.Parse(tbNumber.Text); //Task<bool> CheckNumberTask = new Task<bool>(CheckIfPrime, number); //CheckNumberTask.Start(); //bool result = CheckNumberTask.Result; //lbResult.Text += " " + result; } public bool CheckIfPrime(object oNumber) { long number = (long)oNumber; bool isPrime = true; for (int i = 2; i < number; i++) { if (number % i == 0) { return false; } } return isPrime; } private void tbNumber_TextChanged(object sender, EventArgs e) { long number = long.Parse(tbNumber.Text); Task<bool> CheckNumberTask = new Task<bool>(CheckIfPrime, number); CheckNumberTask.Start(); bool result = CheckNumberTask.Result; lbResult.Text += " " + result; } private void tbName_TextChanged(object sender, EventArgs e) { } private void tbDate_TextChanged(object sender, EventArgs e) { } }}צירפתי גם בקובץ המצורף את כל ה-solution [attachment deleted by admin]
פורסם 2011 בנובמבר 2513 שנים הוא אמר לך לשים את זה על MOUSELEAVE ואתה (לפחות לפי שם הפונקציה) שמת את זה תחת text changed. ברור שהוא יופעל כל פעם שאתה מכניס ספרה חדשה, הטקסט בתיבה השתנה.event מתאים יותר מ-Mouse leave למה שתיארת הוא lose focus או משהו בסגנון. זה שסמן העכבר לא מעל התיבה, לא אומר שהמשתמש סיים להכניס קלט לתוכה...
פורסם 2011 בנובמבר 2513 שנים אתה משתמש באוונט TextChanged ואז ברור שכל שינוי בטקסט שבתיבה מפעיל את הפונק'למה אתה לא משתמש באוונט שרשמתי לך ?
פורסם 2011 בנובמבר 2613 שנים מחבר אוקיי הבנתי מה הבעיה שלי ועכשיו הצלחתי, פשוט מקודם במקום ללחוץ על הפונק' דבל קליק פשוט שיניתי בתיבה בתוכה לשם של הכפתור שליהתרגיל הוא תרגיל עם מולטי threading ככה שאני אמור להכניס בתיבה של המספר מספר שהוא גדול ככה שזה יקח למחשב זמן לחשב ובנתיים להכניס ב-2 התיבות מתחת שם ותאריך ובלי לחכות שהמחשב יסיים לחשב כי בנתיים התוכנית קופאת ואת זה אני לא מצליח למרות שהגדרתי לו TASK
פורסם 2011 בנובמבר 2613 שנים זה כבר נושא יותר מסובך להסביר אם אתה לא מכיר אותו בכלל.עם TASK אתה צריך להשתמש ב-delegate שזו מחלקה מיוחדת שיודעת להחזיק הפנייה למתודה שלך (מעין פוינטר לפונק')אז אתה צריך ליצור אובייקט delegate ולתת לו את שם הפונק' שלך (זו שאמורה לרוץ בת'רד אחר)ואז כשאתה יוצר את ה-TASK אתה נותן לו את ה-delegate שיצרת והוא מפעיל אותו (בעצם מפעיל את הפונק' שלך)החלק היותר בעייתי הוא איפה לחכות לתוצאה של הפונק' - CheckNumberTask.Resultאתה לא יכול לבקש אותה באותה פונק' שמפעילה את הת'רד.יש כמה שיטות - הפשוטה לדעתי היא ליצור טיימר (קונטרול של WINFORM) שנקרא כל 50ms נגיד.הטיימר בעיקרון מפעיל אוונט כל פרק זמן כזה ושם אתה יכול לבדוק אם התקבלה כבר תשובה, אם לא התקבלה אז אתה יוצא מהאוונט.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.