2015-02-12 2 views
0

Я использую следующий код, чтобы закрыть и открыть скрытую форму (путем проверки открытого приложения). Можно ли получить одну скрытую форму и закрыть другой, где обе формы соответствует той же самой (скажем form1 скрыты в разные периоды во время выполнения)Можно ли получить одну скрытую форму и закрыть другую скрытую форму?

var frm = Application.OpenForms.OfType<Form>().FirstOrDefault(x => x.GetType() == typeof(FrmAdd_To_Cart)); 

if (frm != null) 
{ 
    frm.Close(); or frm.show(); 
} 
+0

Вам нужно что-то отличить и распознать между двумя. Некоторая публичная собственность, даже свойство Tag, заданное для разных значений. – Steve

+0

Свойства тегов? Можете ли вы объяснить @Steve – Ameena

+0

https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag(v=vs.110).aspx – Steve

ответ

1

Вы могли бы использовать свойство Tag, чтобы распознать одну форму от другой

FrmAdd_To_Cart formToClose = null; 
var frmCartList = Application.OpenForms.OfType<FrmAdd_To_Cart>(); 
if (frmCartList != null) 
{ 
    foreach(FrmAdd_To_Cart frm in frmCartList) 
    { 
     // Your logic could be based on the value that you set 
     // in the Tag property when you create the form 
     // For example you could have a CustomerID stored in the Tag 
     // int customerID = Convert.ToInt32(frm.Tag); 

     // But probably it is better to have custom public property 
     // in the definition of your FrmAdd_To_Cart form class like 
     // if(frm.CustomerID == CurrentCustomer.ID) 
     // ..... 

     // Or if you want to close the form that you identify with the tag 
     if (this.lblBil.Text == frm.Tag.ToString()) 
     { 
      formToClose = frm; 

      break; // exit the loop and then close     

      // Can't do this here because this will change 
      // the iterating collection and this is not allowed 
      // frm.Close(); 
     } 

    } 
    if (formToClose != null) 
     formToClose.Close(); 
} 

Обратите внимание, что вы можете использовать расширение OfType получить только те формы, которые вас интересуют. Кроме того, это означает, что у вас есть IEnumerable вернулся и, таким образом, вы должны цикл с использованием Еогеаспа.

+0

Я не понимаю эту строку "if (frm.CurrentCustomerState == CustomerStateEnum.NotLoggedIn) ". – Ameena

+0

Вы хотите сказать, что каждый раз, когда я открываю frmobject, мне приходится сопоставлять тег (например, customer_id) и проверять, совпадает ли тег с тегом формы, который мы хотим закрыть или открыть. Исправьте меня, если я ошибаюсь. – Ameena

+0

У меня есть 2 FrmAdd_To_Cart Формы с различным значением тега formobject (скажем, frmaddtocart.tag = 1 и frmaddtocart = 2 соответственно) ... И я пробовал что-то вроде этого, ...... var frmCartList = Application.OpenForms .OfType (); если (frmCartList! = NULL) { Еогеасп (FrmAdd_To_Cart FRM в frmCartList) { INT billnum = Convert.ToInt32 (frm.Tag); if (this.lblBil.Text == billnum) { frm.Close(); } } } /////////// Я получаю «Коллекция была изменена, операция перечисления не может выполняться. ИСКЛЮЧЕНИЕ ЭКСПЛУАТАЦИИ ИНАЛИЗА» – Ameena

Смежные вопросы