Как сделать массив управления в C # 2010.NET? - PullRequest
4 голосов
/ 25 марта 2011

Я недавно перешел с Visual Basic 6 на C # 2010 .NET.

В Visual Basic 6 была возможность указать, сколько управляющих массивов вы хотели бы использовать, изменив для него «индекс».

Мне интересно, возможно ли это в C #, и если да, то как мне поступить с таким классом, как:

func fc = new func();

Но возможно ли использовать в массиве более одного массива?

И, чтобы быть более ясным,

Visual Basic 6, когда вы загружаете элемент управления, такой как текстовое поле или пользовательский элемент управления, он имеет в окне свойств параметр «Индекс», и если вы измените его на 0, 1 и т. Д., То это позволит вам используйте все эти индексы, не загружая несколько элементов управления 50 раз.

Я думаю, что это может иметь какое-то отношение к массиву, но я не совсем уверен.

Спасибо за любую помощь.

Ответы [ 5 ]

9 голосов
/ 25 марта 2011

Этот фрагмент кода не слишком далеко продвинет вас. Создание контрольного массива не проблема, просто инициализируйте его в конструкторе формы. Затем вы можете выставить его как свойство, хотя обычно это плохая идея, поскольку вы не хотите раскрывать детали реализации. Примерно так:

public partial class Form1 : Form {
    private TextBox[] textBoxes;

    public Form1() {
        InitializeComponent();
        textBoxes = new TextBox[] { textBox1, textBox2, textBox3 };
    }

    public ICollection<TextBox> TextBoxes {
        get { return textBoxes; }
    }
}

Который затем позволяет написать:

var form = new Form1();
form.TextBoxes[0].Text = "hello";
form.Show();

Но не позволяйте форме управлять своими собственными текстовыми полями.

3 голосов
/ 25 марта 2011

В .NET вы создаете массив элементов управления, затем вы создаете экземпляр элемента управления TextBox для каждого элемента массива, устанавливая свойства элемента управления и помещая его в форму:

    TextBox[] txtArray = new TextBox[500];
    for (int i = 0; i < txtArray.length; i++)
    {
      // instance the control
      txtArray[i] = new TextBox();
      // set some initial properties
      txtArray[i].Name = "txt" + i.ToString();
      txtArray[i].Text = "";
      // add to form
      Form1.Controls.Add(txtArray[i]);
      txtArray[i].Parent = Form1;
      // set position and size
      txtArray[i].Location = new Point(50, 50);
      txtArray[i].Size = new Size(200, 25);
    }
.
.
.
Form1.txt1.text = "Hello World!";

Если ваш макет не является более упрощенным (т. Е. Строки и столбцы текстовых полей), использование дизайнера может оказаться более простым, менее трудоемким и более удобным в обслуживании.

1 голос
/ 25 марта 2011

Не совсем так, как VB6, но довольно легко написать свой код на c #.

Если вы создаете элемент управления, например Button в конструкторе, вы можете скопировать код из *.Designer.cs файла

Обычно это выглядит так

private System.Windows.Forms.Button button1;
...
this.button1.Location = new System.Drawing.Point(40, 294);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 14;
this.button1.Text = "Button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
...
this.Controls.Add(this.button1);

Вырежьте этот код и вставьте вместо него метод, возвращая кнопку

private Button CreateButton()
{
    private System.Windows.Forms.Button button1;

    this.button1.Location = new System.Drawing.Point(40, 294); // <-- change location for each
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(75, 23);
    this.button1.TabIndex = 14; // <-- increase tab index or remove this line
    this.button1.Text = "Button1";
    this.button1.UseVisualStyleBackColor = true;
    this.button1.Click += new System.EventHandler(this.button1_Click);

    this.Controls.Add(this.button1);
    return button;
}

затем вызовите этот метод следующим образом

List<Button> buttons = new List<Button>();
for(int i = 0; i < 10; i++)
{
    buttons.Add(CreateButton());
}
0 голосов
/ 04 сентября 2015

На основе шаблона Триго:

Здесь приведен пример обработки двумерного массива textBox
panel1 с конструктором
(у меня была Autoscroll = true, Size = 858;525)

public partial class Form1 : Form
{
    TextBox[,] txtBoxArray = new TextBox[2,100];
    public Form1()
    {
        InitializeComponent();

        for (int i = 0; i < txtBoxArray.GetLength(0); i++)
        {
            for (int j = 0; j < txtBoxArray.GetLength(1); j++)
            {
                // instance the control
                txtBoxArray[i, j] = new TextBox();
                // set some initial properties
                txtBoxArray[i, j].Name = "txtBox_" + i.ToString() + "_" + j.ToString();
                txtBoxArray[i, j].Text = txtBoxArray[i, j].Name; //"";
                // add to form
                this.Controls.Add(txtBoxArray[i,j]);
                txtBoxArray[i, j].Parent = panel1;
                // set position and size
                txtBoxArray[i, j].Location = new Point(50+i*333, 50 + j * 25);
                txtBoxArray[i, j].Size = new Size(200, 25);
            }
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
    //...


}

this will look like this

0 голосов
/ 25 марта 2011

Прочтите это руководство по переходу от MS: http://msdn.microsoft.com/en-us/library/kxt4418a%28v=vs.80%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...