public class KSlovo : Control
{
public int size;
TextBox[] word ;
KNumber Number;
int X, Y;
public KSlovo(int Size,int x,int y,char number, bool ver_gor)
{
Number = new KNumber(Color.DeepPink,new Pen(Color.ForestGreen),x,y,number);
word = new TextBox[Size];
size = Size;
X = x;
Y = y;
for(int i = 0; i <size; i++)
{
word = new TextBox();
word.TabIndex = i;
word.ForeColor = Color.White;
word.Multiline = true;
word.MaxLength = 1;
word.Size = new Size(40, 40);
if (ver_gor == true)//если горизонталь
{
X += 40;
word.Location = new Point(X, y);
}
if (ver_gor == false)//если вертикаль
{
Y += 40;
word.Location = new Point(x, Y);
}
this.Controls.Add(word); //либо здесь не надо
}
}
}
Не выводится массив текстбоксов
Код:
Существует ArrayList, который представляет собой массив слов кроссворда. Функция заполнения этого ArrayList выглядит следующим образом:
Код:
protected void load()
{
Pen penBlue = new Pen(Color.Blue, 0.5f);
Pen penColor = new Pen(Color.Red, 0.5f);
Pen penEmpty = new Pen(Color.White);
char n;
int xbaseOffset = 20, ybaseOffset = 20;
bool ver_gor = true; //если горизонталь
for (int i = 0; i<n1; i++)
{
for (int j = 0; j<n2-1; )
{
if (array[i,j]>48 && array[i,j]<58)
{
n=array[i,j];
knumber.Add(new KNumber(Color.Blue, penBlue, xbaseOffset, ybaseOffset,array[i,j]));
if (array[i,j+1]=='*' && array[i,j+2]=='*')
{
string w = "";
while (array[i,++j]=='*')
w+='*';
KSlovo s = new KSlovo(w.Length, xbaseOffset, ybaseOffset, n, ver_gor);
kslovo.Add(s);
this.Controls.Add(s); //либо здесь не надо
}
else
{
j++;
xbaseOffset += 40;
}
}
else
{
xbaseOffset +=40;
j++;
}
}
ybaseOffset += 40;
xbaseOffset = 20;
}
}
{
Pen penBlue = new Pen(Color.Blue, 0.5f);
Pen penColor = new Pen(Color.Red, 0.5f);
Pen penEmpty = new Pen(Color.White);
char n;
int xbaseOffset = 20, ybaseOffset = 20;
bool ver_gor = true; //если горизонталь
for (int i = 0; i<n1; i++)
{
for (int j = 0; j<n2-1; )
{
if (array[i,j]>48 && array[i,j]<58)
{
n=array[i,j];
knumber.Add(new KNumber(Color.Blue, penBlue, xbaseOffset, ybaseOffset,array[i,j]));
if (array[i,j+1]=='*' && array[i,j+2]=='*')
{
string w = "";
while (array[i,++j]=='*')
w+='*';
KSlovo s = new KSlovo(w.Length, xbaseOffset, ybaseOffset, n, ver_gor);
kslovo.Add(s);
this.Controls.Add(s); //либо здесь не надо
}
else
{
j++;
xbaseOffset += 40;
}
}
else
{
xbaseOffset +=40;
j++;
}
}
ybaseOffset += 40;
xbaseOffset = 20;
}
}
пока делаю для горизонтальных слов
Как теперь вывести этот массив? По-моему, должно было быть так: при вызове конструктора KSlovo текстбоксы должны были вывестись, может я что-то куда-то забыла добавить?
Свойство Name каждому текстбоксу задавать не забывай, ещё его размеры тоже. Потом вызвать Update для формы.
Update где нужно вызвать, для чего?
Update после добавления всех контролов на форму для её перерисовки. В свойстве Name задаёшь название компонента, для каждого текстбокса должно быть разное!
не понятно. посмотри внимательнее: каким образом я буду задавать разные Name для текстБоксов, если они создаются каждый по одному конструктору? Неужели мне надо в параметры конструктора добавить string и в load в цикле создавать новую строку. А блин, так тоже не получится, содержание строки-то будет всегда одно и то же.
а еще только что попробовала вызывать функцию Update после строки this.Controls.Add(...) сначала только в load (не получилось), потом и в конструкторе, тоже не получается добиться желаемого результата. :(
Потом можно использовать
Show(primer);