2016-06-29 3 views
0

я объявил класс с именем SubjectRow, каждый экземпляр которого имеет свои собственные элементы управления, унаследованные от System.Windows.Forms.Control:Добавление элементов управления в новый класс

public class SubjectRow : Control 
    { 
     static int counter = 0; 
     public ComboBox subjectBox = new ComboBox(); 
     public Label maxBox = new Label(); 
     public TextBox nBox = new TextBox(); 
     public TextBox aBox = new TextBox(); 
     public TextBox mBox = new TextBox(); 
     public TextBox eBox = new TextBox(); 
     public TextBox cBox = new TextBox(); 

     public SubjectRow() 
     { 
      counter++; 
      subjectBox.Location = new Point(100, 300); 
     } 
    } 

В моем SubjectRow() метода, вы можете увидеть мои попытки сделать ComboBox subjectBox видны в форме с использованием new Point(left, top). Однако это ничего не делает, и форма остается пустой во время выполнения.

Я довольно новичок в C#, но я понимаю, что метод SubjectRow() запускается всякий раз, когда создается новый экземпляр class SubjectRow. Так почему же это не работает? Как я могу установить элемент управления subjectBox в форме в определенном месте?

+0

Я забыл упомянуть, что я также не разрешается использовать дизайнер на Visual Studio. – Nemo

+0

Можете ли вы добавить код, который создает экземпляр? – MoustafaS

+0

Это не то, как вы создаете пользовательские элементы управления. Посмотрите здесь http://stackoverflow.com/questions/17530323/adding-new-user-control-programmatically-in-windows-forms – pm100

ответ

2

Вы сказали, что у вас есть форма, поэтому вы должны добавить параметр form в конструктор;

public SubjectRow (Form f) 
{ 
    counter++; 
    subjectBox.Location = new Point(100, 300); 
    f.Controls.Add(subjectBox); 
} 

И в коде формы, создайте экземпляр, подобный этому.

SubjectRow test= new SubjectRow (this); 

Надежда помогает,

+0

Самый быстрый и простой ответ! Спасибо! – Nemo

0
  • управления не реализует UserControl

Ниже правильный способ сделать это

MyUserControl.cs:

using System.Windows.Forms; 

namespace ControlTest 
{ 
    public partial class MyUserControl : UserControl 
    { 
     public MyUserControl() 
     { 
      InitializeComponent(); 
     } 

     private void InitializeComponent() 
     { 
      this.txtName = new System.Windows.Forms.TextBox(); 
      this.lblName = new System.Windows.Forms.Label(); 
      this.SuspendLayout(); 
      // 
      // txtName 
      // 
      this.txtName.Location = new System.Drawing.Point(107, 18); 
      this.txtName.Name = "txtName"; 
      this.txtName.Size = new System.Drawing.Size(305, 20); 
      this.txtName.TabIndex = 0; 
      // 
      // lblName 
      // 
      this.lblName.AutoSize = true; 
      this.lblName.Location = new System.Drawing.Point(22, 23); 
      this.lblName.Name = "lblName"; 
      this.lblName.Size = new System.Drawing.Size(35, 13); 
      this.lblName.TabIndex = 1; 
      this.lblName.Text = "Name"; 
      // 
      // MyUserControl 
      // 
      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.Controls.Add(this.lblName); 
      this.Controls.Add(this.txtName); 
      this.Name = "MyUserControl"; 
      this.Size = new System.Drawing.Size(433, 57); 
      this.ResumeLayout(false); 
      this.PerformLayout(); 

     } 

     private System.Windows.Forms.TextBox txtName; 
     private System.Windows.Forms.Label lblName; 
    } 
} 

в форму, добавить пользовательский элемент управления:

using System.Windows.Forms; 

namespace ControlTest 
{ 
    public partial class Form1 : Form 
    { 
     private MyUserControl myUserControl1; 

     public Form1() 
     { 
      InitializeComponent(); 
      this.myUserControl1.Location = new System.Drawing.Point(12, 12); 
      this.myUserControl1.Name = "myUserControl1"; 
      this.myUserControl1.Size = new System.Drawing.Size(433, 57); 
      this.myUserControl1.TabIndex = 0; 

     } 
    } 
} 
0

Просто образец быстро и грязно:

public partial class SubjectRow : UserControl 
    { 
    private ComboBox comboBox1; 
    private Label label1; 
    private TextBox textBox1; 
    private TextBox textBox2; 
    private TextBox textBox3; 
    private TextBox textBox4; 
    private TextBox textBox5; 

    public SubjectRow() 
    { 
     InitializeComponent(); 

     comboBox1 = new ComboBox(); 
     label1 = new Label(); 
     textBox1 = new TextBox(); 
     textBox2 = new TextBox(); 
     textBox3 = new TextBox(); 
     textBox4 = new TextBox(); 
     textBox5 = new TextBox(); 

     Controls.Add(textBox5); 
     Controls.Add(textBox4); 
     Controls.Add(textBox3); 
     Controls.Add(textBox2); 
     Controls.Add(textBox1); 
     Controls.Add(label1); 
     Controls.Add(comboBox1); 
    } 
    } 
+0

Должен работать ... Но очень грязно :) –

0
public SubjectRow (Form f, int pointX=100, int pointY=300) 
{ 
    counter++; 
    subjectBox.Location = new Point(pointX, pointY); 
    f.Controls.Add(subjectBox); 
} 

SubjectRow test= new SubjectRow (this,100,300); // You can control position of every control 
Смежные вопросы