2016-03-17 3 views
0

У меня была эта проблема, я не могу добавить элемент управления внутри класса. Более конкретно, Controls.Add(Button);. Это возможно или я чего-то не хватает.Добавление кнопок управления внутри класса

MyFunctions mf = new MyFunctions(); 
    class MyFunctions 
    { 
     public int ButtonWidth(int number) 
     { 
      string a = ""; 
      int ButtonWidth=0; 

      Button x = new Button(); 
      x.Size = new Size(10, 40);//Initial Size 
      x.AutoSize = true; 
      x.AutoSizeMode = AutoSizeMode.GrowAndShrink; 
      Controls.Add(x);//Why i can't this one? 

      for(int i=1;i<=number;i++) 
      { 
       a += "X"; 
       x.Text = a; 
       ButtonWidth = x.Width; 

       MessageBox.Show(i + "-" + a + "-" + ButtonWidth); 
      } 
      return ButtonWidth; 
     } 
    }` 

У меня есть сообщение об ошибке.

не может получить доступ к нестационарному элементу внешнего типа.

Я проверил, изменилась ли ширина кнопки, когда button.text изменяет свою длину. но значение button.width поддерживается постоянным.

ответ

1

Ваш MyFunctions - это отдельный класс от вашего класса Form. И, следовательно, он не имеет Controls имущество (Controls собственность принадлежит к вашему Form - или его производным - class)

Если вы хотите добавить Button в вашем Formclass, вы должны сделать свой блок кода Method вашей Form вместо нового, разделенных MyFunctions class:

public class MyForm : Form { 
    public int ButtonWidth(int number) //this is OK 
    { 
     string a = ""; 
     int ButtonWidth=0; 

     Button x = new Button(); 
     x.Size = new Size(10, 40);//Initial Size 
     x.AutoSize = true; 
     x.AutoSizeMode = AutoSizeMode.GrowAndShrink; 
     Controls.Add(x);//Why i can't this one? 

     for(int i=1;i<=number;i++) 
     { 
      a += "X"; 
      x.Text = a; 
      ButtonWidth = x.Width; 

      MessageBox.Show(i + "-" + a + "-" + ButtonWidth); 
     } 
     return ButtonWidth; 
    } 
} 

это, как говорится, так как ваше имя метода является ButtonWidth, не рекомендуется (не хороший дизайн), чтобы добавить Button в методе, который предназначен для получения ButtonWidth. Рассмотрите разделение методов: CreateButton, чтобы создать Button, GetButtonWidth, чтобы получить ButtonWidth (хотя это может быть необязательно сделанный метод), а затем вы просто добавляете свой созданный Button в FormControls.

+0

спасибо, что это потрясающе. оно работает. – Vincent

+0

@Vincent большой. ;) учтите мой комментарий к вашему дизайну кода тоже ... Я настоятельно рекомендую вам рассмотреть возможность разделения методов, чтобы сделать ваш код намного понятнее. – Ian

0

Вы пытаетесь получить доступ к экземпляру класса из экземпляра другого класса.

Попробуйте сделать MyFunctions статическими или включить функции в базовый класс, из которого производится первый класс.