פורסם 2010 באוגוסט 2315 שנים חברה אני יודע שפירסמתי כבר שאלות לגבי הנושא הספציפי הבעיה שאני לא מצליח להתגבר על זה . ובכן, עוד פעם תיאור קצר :יש לי טופס עם מספר כפתורים גדולים . על כל כפתור מיקמתי איזשהו פקד שיצרתי שמכיל תיבת תמונה שעליה אני מצייר גרף שמתעדכן כל תיזמון שעון ומצייר את עצמו .זה הקוד :private void timerGraph_Tick(object sender, EventArgs e) { // Move to and get the latest value in the performance counter try //the list of resourcers is static until next refresh, in order to prevent excep check if resource { //is still available currVal = perfGraphCounter.NextValue(); if (currVal > maxVal) maxVal = currVal; lblPeekVal.Text = "Max :" + Math.Round(maxVal,1); Trimedval = currVal % 100; // Update the label with the value lblUsagePrecent.Text = "Value :"+Math.Round(Convert.ToDouble(currVal.ToString()), 1); Graphics gfx = picGraph.CreateGraphics(); gfx.DrawLine(pen1, graphLast, (picGraph.ClientRectangle.Bottom - 10 - lastVal), graphNext, (picGraph.ClientRectangle.Bottom - 10 - Trimedval)); gfx.DrawLine(pen2, graphLast, (picGraph.ClientRectangle.Bottom - 10 - lastVal), graphLast, (picGraph.ClientRectangle.Bottom)); graphLast = graphNext; lastVal = Trimedval; graphNext += 2; if (graphNext > picGraph.ClientRectangle.Right) { picGraph.Invalidate(); graphNext = 0; graphLast = graphNext; } } catch { timerGraph.Enabled = false; MessageBox.Show("The resource you've selected is out of date\r\nRefresh the list."); this.Dispose(); MonitorPerformance.DecWorkingGraphsCounter(); } }הקוד למעלה זה רק הקוד שבמצע את הציור לתמונה, הבעיה שלי היא בכפתור שעליו יושבת התמונה הזאת .הבעייה שלי היא שבכל ארוע כניסה יציאה ולחיצה על הכפתור כולו, הוא מבצע REPAINT לכל תכולתו בעצם . אני חייב להימנע מההשפעה של זה על הציור בגרף .אשמח לעזרה .
פורסם 2010 באוגוסט 2315 שנים לא מבין למה פתחת על זה נושא נוסף כשהיה כבר נושא, אבל שיהיה.בכל מקרה, כמו שכבר כתבתי לך שם, פקד מסוג PictureBox (או כל פקד אחר)לא נועד שפשוט יציירו עליו סתם ככה, כי ברגע שהוא עושה לעצמו Repaint אז אתה תאבד את הציור.על מנת לצייר כמו שצריך על גבי תמונה, צריך להשתמש באובייקט כלשהו היורש מ-Image, כמו למשל Bitmapשהוא קל ונוח לעבודה, ואז לצייר עליו ולקבוע אותו בתור ה-Image של פקד ה-PictureBox שלך.אני מציע שתנסה לבצע את השינויים שאמרתי לך כאן (בדיוק כמו בת'רד הקודם) ואז תחזור אם זה עדיין לא עובד,בצירוף הקוד הרלוונטי (המעודכן) ומה בדיוק עובד/לא עובד.ואגב, בנוגע ל-Try/Catch שלך, זה נראה כאילו הוא פשוט מחליף בדיקה של If (אם כי קשה להיות בטוח).מבחינה רעיונית, Try/Catch אמורים להיות כאשר אין דרך לוודא שלא תיזרק שגיאה, ולא כאשר זה יותר נוח לכתיבה,גם כי זה הופך את הקוד לפחות קריא ונוח להבנה עבור אנשים אחרים, וגם כי זריקה ותפיסה של שגיאות הן פעולותכבדות יחסית מבחינת ה-Overhead שלהן.שים לב שאם כל מחזור שעון (כמה שזה לא יהיה בטיימר שלך) אתה צריך לצייר מחדש, זה הופך להיות קצת כבד,כי כל פעם צריך ליצור תמונה חדשה ואז לצייר עליה ואז לקבוע אותה בתור ה-Image של הפקד תמונה שלך.יכול להיות שיש פתרונות יותר אלגנטיים בשביל מה שאתה מעוניין לעשות, אבל כרגע לפחות נמצא פתרון עובד אחד...
פורסם 2010 באוגוסט 2415 שנים מחבר ניסיתי כבר לעשות את הציור על תמונה בתוך הPIC BOX זאת לא הבעייה .הבעייה היא בארוע כניסה ויציאה ולחיצה על הכפתור כולו - להזכירך זה יושב על כפתור .לגבי הTRY וCATCH אני עדיין עובד על זה, אבל כעיקרון זה פותר לי בעייה של פנייה למשאב שכבר לא קיים .
פורסם 2010 באוגוסט 2415 שנים מזאת אומרת שה-picturebox יושב בתוך כפתור? האם הם פשוט שניהם באותו מקום ב-form? אם כן, זה לא משנה בכלל, כל עוד אתה דואג שה-Picturebox יהיה ה"עליון" מביניהם, באמצעותpicGraph.BringToFront()אחרת, אני לא בדיוק מבין למה אתה מתכוון.
פורסם 2010 באוגוסט 2415 שנים מחבר אני לא צריך לעשות BRING TO FRONT אחי, למה אני צריך לעשות זה????תדמיין פשוט כפתור שבמקום טקסט עליו יש עליו פקד אחר שמתפקד עצמאית .
פורסם 2010 באוגוסט 2415 שנים כן, הבנתי את זה.אבל אין שום "שילוב" בין הכפתור לבין התיבת תמונה. לתיבת התמונה לא אמור להיותאכפת בכלל מהכפתור, כי היא סתם נמצאת מעליו, זה לא שהם חלק מאותו אובייקט או משהו כזה.אם אחד מהם פשוט נמצא על השני, יכול להיות שהכפתור עולה על התיבת תמונה ומסתיר אותו.אם זאת הבעיה, לעשות BringToFront כאשר זה קורה יכול לפתור את הבעיה.אם זאת לא הבעיה,אז אתה תצטרך להיות קצת יותר ספציפי ולהסביר מה בדיוק קורה באירועי הכניסה והיציאהמהכפתור, שאמרת שהם גורמים לבעיה כלשהי, אך לא הסברת לאיזה בעיה.
פורסם 2010 באוגוסט 2415 שנים מה בדיוק הכוונה שלך בפקד שנמצא על הכפתור?לא כ"כ ברור לי מה עשית שם - אם אתה רוצה כפתור עם ציור דינמי, אז תשים תמונה בתוך הכפתור (לא פקד, סתם, תמונה) - פשוט button.Background image = myBitmapואז אתה יכול לשחק עם התמונה כמה שאתה רוצה בקוד ולעדכן את הכפתור על ידי invalidate.ובגלל שהתמונה 'בילט אין' בכפתור אז הקוד הפנימי שלו כבר יידע לעדכן כשהעכבר עובר מעל וכו'.אם זה לא מה שאתה צריך, אז תפרט קצת יותר מה בדיוק הולך שם כי כרגע (לפחות לי) זה לא כ"כ ברור...
פורסם 2010 באוגוסט 2415 שנים מחבר חברה תודה רבה על העזרה .אני מבין שזה מאוד לא ברור, אבל בשביל להמחיש בצורה יותר טובה אני אצטרך להעתיק חתיכת קוד ענק אז ננסה להסביר שוב .NJMAN : אחי, קיים USER CONTROL שיצרתי, שחלק מהאובייקטים שבו זה אובייקט תמונה, שהקוד לציור עליה נמצא בתחילת הדף (למעלה ) .כל ה-CONTROL הזה, ממקומם על כפתור פשוט בטופס . איך אני עושה שבארוע כניסה/יציאה/לחיצה על הכפתור הפשוט (החיצוני) שום גורם ב-CONTROL שלי לא יעשה לעצמו REPAINT או משהו כזה ????
פורסם 2010 באוגוסט 2415 שנים אתה לא יכול לעשות את זה -אפשר לעשות Override לאירוע צביעה שלו ולבטל אותו במקרים מסויימים,אבל סביר שזה פשוט יגרום לכך שלא יראו את הפקד לפעמים, כי הוא פשוט לא יצייר את עצמו.כלומר, אתה יכול, אבל אין סיבה לעשות את זה, אובייקטים מסוג Image נוצרו בדיוק בשביל זה - לשמורעל ה"ציור" שלהם למרות שעובר מעליהם עכבר, עושים להם Minimize וכד'.כמו שכבר אמרתי לך, ו-NJMAN גם כתב זאת, צריך לצייר על תמונה (אובייקט Image כלשהו) ואז לקבועאותו בתור ה-Image או BackgroundImage של פקד כלשהו, ואז זה יישאר, כל עוד אתה לא מוחק אתהתמונה הזאת איפשהו, למרות אירועי כניסה/יציאה.
פורסם 2010 באוגוסט 2415 שנים מחבר כן ניסיתי גם את הOVERRIDE .זה דופק לי גם תופעות שאני רוצה שייקרו .טוב נמשיך לנסות .....
פורסם 2010 באוגוסט 2415 שנים כמובן שזה דופק, זאת לא הדרך לצייר.תנסה לצייר על Image ואז יהיה אפשר לדבג את זה כמו שצריך.פקדים מתלכתחילה לא נועדו לצייר ישירות עליהם, אז ברור שזה לא יעבוד כמו שצריך.
פורסם 2010 באוגוסט 2415 שנים מחבר איפה פספסת את הנקודה שאני מצייר על תמונה ?????אני לא מצייר על שום פקד אחי.... התמונה נמצאת על כפתור !
פורסם 2010 באוגוסט 2415 שנים מה הוא picGraph? האם הוא פקד מסוג PictureBox?אם כן, אז אתה מצייר על פקד, ולכן זה לא עובד לך.אם לא, מה הוא picGraph?
פורסם 2010 באוגוסט 2415 שנים מחבר ניסיתי לשנות את הקוד ל :graphics gfx = graphics.formImage(image)ואני מציב בו את התמונה שב-PICGRAPH הבעייה שבמצב הזה קורה משהו אחר :רק בארוע PAINT של כל הכפתור הציור מתעדכן ולא כל תיזמצון שעון
פורסם 2010 באוגוסט 2415 שנים האם לאחר שינוי התמונה אתה קורא ל-Invalidate של הפקד? (או משהו כזה, ישנן מספר אופציות. יש גם Update אני חושב)תנסה להכניס את הפקודה הזאת לאחר שאתה מצייר ואז תראה אם זה מתעדכן.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.