SelectAll OnGotFocus Windows.Forms.TextBox

יום רביעי, יוני 13, 2012

יצא לי לא מזמן לנסות לכתוב קוד שיגרום לטקסט בתיבת הטקסט להיות במצב בחור (Selected) בזמן שתיבת הטקסט מקבלת פוקוס. הקוד הראשון שכתבתי היה כזה: protected override void OnGotFocus(EventArgs e) {     base.OnGotFocus(e);     SelectAll(); } הקוד הזה אכן...
תגיות: , , ,
אין תגובות

שליחת מקשי מקלדת לחלונות אחרים מתוך תהליכים

יום רביעי, מאי 16, 2012

נניח שיש לכם מחשבון פתוח (calc.exe) ואתם רוצים מתוך קוד שלכם שהמחשבון יתחיל לעשות חישובים, מסתבר שניתן לשלוח לכל חלון אירוע מקשי מקלדת (ועכבר).   בדרך כלל כנראה לא נרצה לכתוב קוד כזה, אבל ישנם מקרים שכן, (באחד הפוסטים הבאים אני אדגים שימוש אמיתי בפתרון זה)   ראשית צריך למצוא את ה – handle של החלון שאליו אנחנו רוצים לשלוח מקשי מקלדת אליו, ניתן למצוא את החלון לפי ה – PID שלו, או לפי השם.     ...
תגיות: , ,
2 תגובות

BindingSource on remove item event

יום שלישי, אפריל 3, 2012

  יצא לי לאחרונה להשתמש בפקד BindingSources ב - WindowsForms Application - תפקיד הפקד הוא לשמש מכניזם המאפשר לממש בקלות קישור בין אובייקטי המידע שלנו לבין פקדים בטופס.   אחד הדברים המעניינים (והמעצבנים) שגיליתי - הוא שאם אני רוצה לדעת מתי נמחק איבר כלשהו מהרשימה (נניח שקשרתי את ה - BindingSource ל - Grid, והמשתמש מוחק שורה מההגריד), ניתן להירשם לאירוע ListChanged כך:     Binder.ListChanged += binder_ListChanged;   ובמתודה לבדוק   private void binder_ListChanged(object sender, ListChangedEventArgs e) {     if (e.ListChangedType == ListChangedType.ItemDeleted)     {         //....     } }     הבעייה עם הקוד הזה - שאין דרך לדעת מיהו אותו Item שנמחק, ובמידה ואני רוצה לעדכן את ה - DataSource הפנימי על מחיקת האיבר,...
תגיות: , , ,
אין תגובות

List Control Editor

יום חמישי, מרץ 15, 2012

  בהמשך לפוסט הקודם (חובה לקרוא לפני הפוסט הנוכחי) ננסה לשנות את ה - List Control Editor כך שיתאים לכמה Controls ולא רק ל - ListBox.   (את הקוד המלא ניתן להוריד כאן)   המחלקה ListBoxItem תהפוך ל - ListControlItem ותראה כך:   public class ListControlItem {     public string Name { get; set; }     public string Value { get; set; }       public override string ToString()     {         if (DesignMode)         {             if (Name == null && Value == null)                 return "ListBoxItem {}";               return string.Format("{0}, {1}", Name, Value);         }           if (Name == null)             return string.Empty;           return Name;    ...
תגיות: ,
אין תגובות

ValueListBox – List Control Editor

יום רביעי, מרץ 14, 2012

  (הקוד המלא להורדה)    אחד הפקדים ב - Windows Forms Application הוא - ListBox, הפקד יכול לקבל רשימה של אובייקטים ולהציג את הערך שחוזר מתוך ה - ToString.   יש לפקד רק בעייה אחת, מקוד ניתן לתת ל - ListBox כל אובייקט שנרצה, אבל ב - Design Time ניתן לתת לו רק מערך של מחרוזות (אלא אם כן נעבוד עם Binding), כשנלחץ על הלחצן של עריכת ה - Items נקבל את החלון הבא:           כמובן שהחלון הזה אינו מאפשר לתת ערכים שהם Key/Value.   לכן הייתי צריך לשנות קצת את המימוש של הפקד.   הסיבה שהחלון הזה קופץ בזמן לחיצה על ה - Items של הפקד, היא שכך נראה...
תגיות: ,
3 תגובות

DataGridViewFontColumn

יום שבת, פברואר 25, 2012

  את הקוד המלא ניתן להוריד מכאן.    יצא לי הצורך להגדיר מחלקה הנראית כך:   public class EnvironmentFont {     public string Name { get; set; }     public Font Font { get; set; } }   היה לי מערך של אובייקטים ממחלקה זו, והייתי צריך להציג אותם על גבי DataGrid בסביבת WinForm.   הגדרת המשימה הייתה להציג על גבי גריד ולחיצה על התא תפתח את ה - FontDialog כדי לאפשר לבחור גופן אחר.     מסתבר שלייצר עמודה מסוג מיוחד לגריד בסביבת WinForms היא לא תהליך פשוט - קיימים מאמרים שונים שמסבירים איך לעשות זאת - בפוסט זה נראה כיצד להגדיר את העמודה.     ראשית נכתוב מחלקה היורשת מ - DataGridViewTextBoxCell שתראה כך:   public class DataGridViewFontCell...
תגיות: ,
אין תגובות

Exception handling in application

יום שני, דצמבר 5, 2011

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

Exception Message Box

יום שלישי, נובמבר 29, 2011

  מי לא כתב את הקוד הבא:   try {   } catch (Exception ex) {     MessageBox.Show(ex.Message); } ובכלל הצגת הודעות באפליקציות חלונאיות תתבצע הרבה פעמים בעזרת MessageBox.     מתברר (משהו יחסית ישן) שהחברה של sql server פתחו MessageBox משלהם - בטח ראיתם מתי שהוא את החלון הבא: (אם עבדתם עם Sql Server Managment Studio)       לחלון הזה יש כמה פיצ'רים מאוד נחמדים, ראשית הוא נראה הרבה יותר טוב מה - MessageBox הסטנדרטי, בנוסף יש בתחתית החלון אפשרות להעתקת הודעת השגיאה ולחצן נוסף להצגת הפרטים הנוספים:       כדי שתוכלו להשתמש בזה באפליקציות שלכם תצטרכו להוסיף reference ל: Microsoft.NetEnterpriseServers.ExceptionMessageBox (חפשו אותו תחת תיקיית ההתקנה של sql (אצלי הוא יושב ב - C:\Program Files\Microsoft SQL Server\90\Tools\Publishing\1.4)   בגרסאות קודמות של...
תגיות: , , ,
6 תגובות

הפעלת Linq Queries על פקדים המכילים Collections ללא חשיפה של IEnumerable מתאים

יום שישי, נובמבר 25, 2011

  אחד מהיכולות החזקות של השפה שאנחנו משתמשים בהם רבות זהו היכולת להפעיל Linq to Objects על כל מי שמממש את:IEnumerable<T>     ב - windows forms ישנם הרבה פקדים המכילים collections - כמו TabControl, TreeView ועוד.   הבעייה עם כל הפקדים הללו שהם חושפים את IEnumerable הרגיל, (ללא T) מה שגורם לכך שאי אפשר להפעיל עליהם שאילתות לינק.     כדי לתקן זאת ניתן להוסיף Extension Method מתאים לכל פקד ולהמיר את ה - IEnumerable  לאחד שתומך ב - Generic, לדוגמא:   internal static class Extension {     internal static IEnumerable<TabPage> AsEnumerator(this TabControl.TabPageCollection collection)     {         foreach (TabPage item in collection)         {             yield return item;         }     }      ...
2 תגובות

Adding a Windows Forms Control to Web page – Part 2

יום שישי, פברואר 12, 2010

  בהמשך לפוסט שהראיתי איך להוסיף Windows User Control לדפי Web (בעזרת ActiveX).   אני רוצה להדגים גישה למאפיינים ולמתודות של ה - User Control.     גישה למאפיינים היא מאוד פשוטה.   כל מאפיין שהוא public אפשר לגשת אליו בעזרת param - לדוגמא:   <object id="UserControl1"         classid="http://localhost/MyApp/ActiveXControls.dll#ActiveXControls.UserControl1">     <param name="BorderStyle" value="FixedSingle" />     <param name="Enabled" value="false" /> </object>   שימו לב שלמאפיין BorderStyle נותנים ערך בלי ה - namespace.   כדי שתוכלו להפעיל מתודות צריך לשנות ב - assembly info את ה - atttibute של ComVisible ל - true     כעת ניתן להפעיל ב - java script מתודות.   נניח שיש את המתודה הבאה ב - User Control   public int Add(int a, int b) {     return a + b; }   ניתן...
תגיות: , , ,
אין תגובות