2015-01-11 4 views
0

Мне нужно написать функцию, чтобы я не мог писать один и тот же код снова и снова.Как передать форму в качестве параметра функции с помощью C#

вот код, который я хотел бы поставить его в функцию

Я бы сделать форму DepartmentsAdd в переменную, так что я могу ра его функции. Кроме того, я должен передать этот массив string[] aa = { "add" } этой функции, так как это 2 значения изменения моего кода.

Как это сделать, C#?

Я пробовал эту функцию до сих пор я получаю ошибки при использовании myform

public static void OpenMyForm(string sectionName, string[] keys, Form myform) 
    { 
     //make sure there are no other forms of the ame type open 
     foreach (Form form in Application.OpenForms) 
     { 
      if (form.GetType() == typeof(myform)) 
      { 
       form.Activate(); 
       return; 
      } 
     } 


     var newSignIn = new Verify(); 

     // Set the Parent Form of the Child window. 
     newSignIn.MdiParent = this; 
     newSignIn.FormClosed += delegate 
     { 

      if (UserInfo.Autherized == true) 
      { 
       UserInfo.Autherized = false; 
       var role = new Roles(); 

       if (role.hasAccess(sectionName, keys)) 
       { 
        var newMDIChild = new myform(); 

        // Set the Parent Form of the Child window. 
        newMDIChild.MdiParent = this; 

        // Display the new form. 
        newMDIChild.Show(); 
        newSignIn.Close(); 
       } 
       else 
       { 
        Common.Alert("You do not have a permissions to perform this action!"); 
       } 
      } 
     }; 

     newSignIn.Show(); 
    } 
} 

здесь есть ошибки, которые я получаю

The type or namespace name 'myform' could not be found (are you missing a using directive or an assembly reference?) 

и

Error 4 Keyword 'this' is not valid in a static property, static method, or static field initializer 

ключевое слово " это «должно ссылаться на основную родительскую форму (то есть Main.cs)

ответ

1

Если вы используете статический метод, тогда вам нужно сделать это.

  • это не будет работать в статическом методе также myFrom является сама форма, так что вы
  • не может создать, например, что путь.

    if(role.hasAccess(sectionName, keys)) 
        { 
         var newMDIChild = myForm; 
    
         // Set the Parent Form of the Child window. 
         newMDIChild.MdiParent = <<your mdi form name>>; // instead of this. 
    
         // Display the new form. 
         newMDIChild.Show(); 
         newSignIn.Close(); 
        } 
    
+0

Спасибо, я исправил эту проблему, не делая статический метод, а также поставьте его в том же классе, который я хочу использовать. но проблема заключается не в создании нового экземпляра Формы. (т. е. 'var newMDIChild = new myform();') – Jaylen

1

Замените эту строку:

if (form.GetType() == typeof(myform)) 

с этим:

if (form.GetType() == myform.GetType()) 

Я не думаю, что мне нужно, чтобы объяснить, что происходит, но дайте мне знать, если причина этого изменения не ясна.

+0

это лучше. Теперь проблема с этой строкой var newMDIChild = new myform(); – Jaylen

0

я, наконец, понял, как заставить его работать

public void OpenMyForm(string sectionName, string[] keys, Form myform) 
     { 
      //make sure there are no other forms of the ame type open 
      foreach (Form form in Application.OpenForms) 
      { 
       if (form.GetType() == myform.GetType()) 
       { 
        form.Activate(); 
        return; 
       } 
      } 

      var newSignIn = new Verify(); 
      newSignIn.MdiParent = this; 
      newSignIn.FormClosed += delegate 
      { 

       if (UserInfo.Autherized == true) 
       { 
        UserInfo.Autherized = false; 
        var role = new Roles(); 

        if (role.hasAccess(sectionName, keys)) 
        { 
         var newMDIChild = myform; 

         // Set the Parent Form of the Child window. 
         newMDIChild.MdiParent = this; 

         newMDIChild.Dock = DockStyle.Fill; 
         // Display the new form. 
         newMDIChild.Show(); 
         newSignIn.Close(); 
        } 
        else 
        { 
         Common.Alert("You do not have a permissions to perform this action!"); 
        } 
       } 
      }; 

      newSignIn.Show(); 
     } 

вызвать этот метод, который я называю эту линию

OpenMyForm("department", new string[] { "add" }, new DepartmentsAdd()); 
Смежные вопросы