Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Как создавать текстбоксы в TableLayoutPanel в VB


Автор: Darth_Sidious 10.3.2008, 13:56
Пишу в целях саморазвития программку (на VB 2008), считающую корни системы линейных уравнений. Нужны два элемента управления наподобие Excel'евской таблицы. Причем, количество строк и столбцов должно задаваться пользователем (например, с помощью счетчика NumericUpDown). Нашел для этих целей TableLayoutPanel, нашел, как там программно добавлять/удалять строки и столбцы (свойства RowCount и ColumnCount), а вот как добавлять в каждую ячейку по текстбоксу, такую инфу не смог найти. Подскажите, пожалуйста, как добавляются и удаляются дочерние элементы в этом контейнере.
Что я искал и нашел? Нашел какой-то метод CreateControl, но в нем (в скобках) почему-то нельзя указать, какой именно Control надо создать. Потом почитал, оказалось, что этот Control надо задать через Dim:
Код
Dim control_instance As Control

и потом уже использовать этот метод:
Код
control_instance.CreateControl()
.
То бишь, как я понимаю, этот метод нужен для создания самой этой таблицы элементов (т.е. TableLayoutPanel). Я им никогда не пользовался (обычно или через New, или создаю элемент на форме или диалоге), поэтому для меня это стало открытием. Но вот "открыть" для себя метод создания дочерних элементов в вышеуказанной таблице я не смог. Помогите, плиз!

Добавлено @ 14:06
Да, забыл отметить, что добавлять элементы в TableLayoutPanel программа будет при обработке события счетчика NumericUpDown_ValueChanged:
Код
Private Sub numNumberOfUnknownParameters_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles numNumberOfUnknownParameters.ValueChanged
        'задаем двумерный массив текстовых полей для ввода коэффициентов при неизвестных и одномерный массив - для ввода свободных членов выражения
        Dim txtCoefficients(frmEquations.array, frmEquations.array), txtAbsoluteTermsOfExpression(frmEquations.array) As TextBox
        
        'меняем в таблицах количество столбцов и строк
        tableCoefficients.ColumnCount = frmEquations.array
        tableCoefficients.RowCount = tableCoefficients.ColumnCount
        tableAbsoluteTermsOfExpression.RowCount = frmEquations.array

        ...

    End Sub

где numNumberOfUnknownParameters - и есть счетчик.

Автор: Freak_FB 12.3.2008, 20:04
Есть одна рекомендация: сначала определи сколько на сколько будет создано TextBoxов, а затем, собственно, создавай их.

В определении формы:
Код

TextBox[,] textBoxes = new TextBox[3, 10]; // Там будет не больше, чем 3 колонки в 10 строк


После определения количества х и y столбцов и строк - создавай эти TextBoxы:
Код

private void button1_Click(object sender, EventArgs e)
{
  numericHorzCount.Enabled = false;
  numericVertCount.Enabled = false;

  this.SuspendLayout();

  for (int x = 0; x < numericHorzCount.Value; x++)
    for (int y = 0; y < numericVertCount.Value; y++)
    {
      textBoxes[x, y] = new TextBox();
      textBoxes[x, y].Location = new Point(10 + x * 100, 50 + y * 35);
      textBoxes[x, y].Size = new Size(80, 20);
      this.Controls.Add(textBoxes[x, y]);
    }
  this.ResumeLayout();
}                


numericHorzCount - это элемент-счётчик, указывающий кол-во колонок
numericVertCount - кол-во колонок

P.S.: TableLayoutPanel тут ваще не нужен
P.P.S.: ничё, шо не на бейсике?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)