פוקוס C# - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

פוקוס C#


gal_il50

Recommended Posts

אפשר בבקשה דוגמא על מה בדיוק להירשם ?

זו המתודה שלי שעובדת בעקבות הלחיצה:


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;
}

קישור לתוכן
שתף באתרים אחרים

תלחץ על התיבה ואז בצד ימין אמור להיות לך חלונית PROPERTIES

בחלק העליון יש אייקון של EVENTS - תלחץ עליו ויוצגו בחלונית כל ה-EVENTS שזמינים עבור התיבה

תמצא את MOUSELEAVE ודבל קליק עליו ייצור לך את הפונקציה

קישור לתוכן
שתף באתרים אחרים

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

קישור לתוכן
שתף באתרים אחרים


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]

קישור לתוכן
שתף באתרים אחרים

הוא אמר לך לשים את זה על MOUSELEAVE ואתה (לפחות לפי שם הפונקציה) שמת את זה תחת text changed. ברור שהוא יופעל כל פעם שאתה מכניס ספרה חדשה, הטקסט בתיבה השתנה.

event מתאים יותר מ-Mouse leave למה שתיארת הוא lose focus או משהו בסגנון. זה שסמן העכבר לא מעל התיבה, לא אומר שהמשתמש סיים להכניס קלט לתוכה...

קישור לתוכן
שתף באתרים אחרים

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

התרגיל הוא תרגיל עם מולטי threading ככה שאני אמור להכניס בתיבה של המספר מספר שהוא גדול ככה שזה יקח למחשב זמן לחשב ובנתיים להכניס ב-2 התיבות מתחת שם ותאריך ובלי לחכות שהמחשב יסיים לחשב כי בנתיים התוכנית קופאת ואת זה אני לא מצליח למרות שהגדרתי לו TASK

קישור לתוכן
שתף באתרים אחרים

זה כבר נושא יותר מסובך להסביר אם אתה לא מכיר אותו בכלל.

עם TASK אתה צריך להשתמש ב-delegate שזו מחלקה מיוחדת שיודעת להחזיק הפנייה למתודה שלך (מעין פוינטר לפונק')

אז אתה צריך ליצור אובייקט delegate ולתת לו את שם הפונק' שלך (זו שאמורה לרוץ בת'רד אחר)

ואז כשאתה יוצר את ה-TASK אתה נותן לו את ה-delegate שיצרת והוא מפעיל אותו (בעצם מפעיל את הפונק' שלך)

החלק היותר בעייתי הוא איפה לחכות לתוצאה של הפונק' - CheckNumberTask.Result

אתה לא יכול לבקש אותה באותה פונק' שמפעילה את הת'רד.

יש כמה שיטות - הפשוטה לדעתי היא ליצור טיימר (קונטרול של WINFORM) שנקרא כל 50ms נגיד.

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...