2011-04-01 4 views
1

Я создал две формы в дизайнере, formA и formB, одна из них является родительской формой по умолчанию, а последняя - измененной «о поле». Мне нужно знать лучший способ получить данные двухмерного массива, чтобы сформировать B из formA, но до сих пор я получил его, чтобы «работать», когда formA случайно был открыт во второй раз вместе с формой B.C# копирование или доступ к двумерному массиву из дочерней формы

Базовый код на данный момент:

// Form A (onload) 
public string[,] arrayname = new string[5, 2] { some values }; 
// Form A (onevent) 
formB f2 = new formB(arrayname); 
f2.Show(); 

// Form B (onload) 
??? 
label1.Text = arrayname[0, 0]; 
label2.Text = arrayname[0, 1]; 
label3.Text = arrayname[1, 0]; 
... 

Заранее спасибо!

ответ

2

Самый простой способ для меня, чтобы изменить конструктор ребенка формы (FormB), чтобы принять массив String, в качестве параметра:

private string[,] arrayname; 
public FormB(string[,] _arrayname) 
{ 
this.arrayname = _arrayname; 
} 

и когда вы создаете свой экземпляр FormB:

formB f2 = new formB(arrayname); 
f2.Show(); 
+0

+1 Это, наверное, так, как я его создавал. Кроме того, я бы сделал конструктор по умолчанию закрытым для связи с параметрами 'arrayName', чтобы форма была полезной. 'private FormB() {}' – Sorax

+1

Забыл, s для второго измерения, но он работал;) – lpd

+0

Исправлено, спасибо за примечание. –

0

Вероятно, проще было бы выставить его как свойство в FormB так:

public string[,] Hours { get; set; } 

И установить его сразу после создания экземпляра:

FormB myFormB = new FormB(); 
myFormB.ArrayName = new string[5, 2] { some values }; 
+0

Это казалось, разобрал ошибку? «WindowsFormsApplication1.FormB» не содержит определения для «arrayname», а метод расширения «arrayname», принимающий первый аргумент типа «WindowsFormsApplication1.FormB», может быть найден (вам не хватает директивы using или ссылки на сборку?) – lpd

+0

Отредактировал свой ответ. Сначала необходимо создать свойство для 'FormB'. – FreeAsInBeer

1

сделать общественную собственность на FormB

public string [,] SomeArray {get;set;} 

После этого установите его, когда вы показываете

FormB f = new FormB(); 
f.SomeArray = this.arrayname; 
f.Show(); 

Тогда в FormB

this.label1.Text = this.SomeArray[0,0]; 
Смежные вопросы