עבור לתוכן

שאלה ב c# העברת מידע בין forms

Featured Replies

פורסם
  • מחבר

אם הבנתי אתה מתכוון פשוט ככה:

ChooseLine ch;
string st1;
st1 = ch.choose.Text;
MessageBox.Show(st1);

זה באמת מביא לי גישה לנתונים שאני צריך אבל יש לי את השגיאה:

'Error 1 Use of unassigned local variable 'ch

פורסם

איפה אתה כותב את הקוד הזה?

שים לב שאתה צריך להגדיר את CH פעם אחת, ולבצע ch = new ChooseLine(); פעם אחת בתחילת הריצה, וכל פעם להשתמש ב- ch.choose.Text.

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

פורסם
  • מחבר

אני כותב את הקוד הזה בform השני איפה שאני צריך את המידע הזה.

והform השני הזה נפתח רק אחרי chooseline אז אם אני עושה שם new הוא לא שומר את הערכים הקודמים הוא כאילו פותח מופע חדש לא משנה אם זה בהתחלה של הform השני או בסוף שלו.

בform אחר שנקרא formMenu אני פותח new לchooseLine

 private void ChooseLineClick(object sender, EventArgs e)
{

ChooseLine choose_line = new ChooseLine();
choose_line.SetBounds(0, 0, 2000, 2000);
choose_line.Show();

}

איך אני יכול ליצור הפניה לאובייקט chooseLine בלי ליצור מופע חדש?

פורסם

נניח שהטפסים נקראים FormA ו-FormB.

FormA מכיל את ה-ComboBox ו-FormB הוא זה שמאוכלס בהתאם לערך של ה-ComboBox.

FormA צריך להחזיק Member מסוג FormB. כשאתה לוחץ על הכפתור ב-FormA, קרא לפונקציה של FormB (נקרא לה PopulateForm) עם הערך שהמשתמש בחר ב-ComboBox. משהו בסגנון של:


mFormB.PopulateForm(myComboBox.SelectedItem);

אחרי ש-FormB קיבל את הערכים הנכונים, הצג אותו למשתמש (למשל mFormB.Show או משהו בסגנון).

את mFormB אתה מאתחל ב-constructor של FormA. (אפשר גם לחכות עם זה עד הלחיצה הראשונה על הכפתור במקום)

פורסם
  • מחבר

ניסיתי לעשות את זה,הבעיה היא שכאשר אני פותח new לformB זה עושה את כל הפעולות שיש בתוך formB ואז עוד אין לו את הנתון שהפעולה צריכה כדי לאכלס

זה הקוד של הפעולה click של הכפתור בformA:

 private void CheckChoose(object sender, EventArgs e)
{

if ((this.choose.Text.Equals(" 1")) || (this.choose.Text.Equals(" 4")) || (this.choose.Text.Equals("88")))
{

this.Hide();
Line_1 line1 = new Line_1();
line1.SetBounds(0, 0, 2000, 2000);
line1.Show();
}

}

בשורה:

 Line_1 line1 = new Line_1();

כל הפעולות בformB מתבצעות ואני צריך את הנתון הזה בשביל פעולה שנמצאת בformB

פורסם

Line_1 זה FormB?

אם כן, אז אתה לא צריך ליצור אותו מחדש כל פעם שלוחצים על הכפתור.

צור אותו פעם אחת (כחלק מה-Constructor של FormA), ושמור אותו כ-member של FormA.

הוסף לו (ל-FormB) פונקציה שמקבלת את הערך מה-ComboBox, וקרא לה אחרי לחיצה על הכפתור.

[

 private void CheckChoose(object sender, EventArgs e)
{

if ((this.choose.Text.Equals(" 1")) || (this.choose.Text.Equals(" 4")) || (this.choose.Text.Equals("88")))
{

this.Hide();
mLine1.Populate(choose.Text);
line1.SetBounds(0, 0, 2000, 2000);
line1.Show();
}

}

פורסם
  • מחבר

אוקיי אני חושב שהצלחתי,אני עובד על זה עכשיו,תודה רבה לכולם :xyxthumbs:

אם יש לי string מסוים ואני רוצה לפרק אותו למשל:

 string st2 = "12fd12";
int i = st2[5];

אני לא מבין למה הערך של i יוצא לי 50,איך אני יכול להמיר את זה לטיפוס int שהערך של i יצא לי 2(האיבר במקום ה-5)?

ואיו אפשר להשתמש בparse כי זה לא מחרוזת זה רק תו.

פורסם

הערך ן שלך יוצא 50 מכיוון שזהו הערך של 2 בטבלת האסקי, אם אתה רוצה להוציא מס' מתוך סטרינג אתה יכול לעשות משהו כזה

int.TryParse(st[5].ToString(), out result) ;

כאשר result זה int

ארכיון

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

דיונים חדשים