2016-10-06 3 views
1

Я бы хотел использовать массивы меток, но он не работает, я не знаю, чего я не вижу. Вот код, который я пытаюсь добраться до работы:Ярлыки не работают C#

for (int x = 1; x <= 10; x++) 
{ 
    Label[] label1 = new Label[10]; 
    label1[x] = new Label(); 
    label1[x].AutoSize = true; 
    label1[x].Text = "text"; 
    label1[x].Left +=10; 
    label1[x].Top +=10; 
} 
+2

В дополнение к точке Gilad Green, если вы действительно хотите, чтобы эти ярлыки отображались в пользовательском интерфейсе где-то, их нужно добавить так, чтобы меня контролирует коллекция 'Controls'. – adv12

+1

Кроме того, здесь у вас есть ошибка 1 в вашем цикле. У вас ничего нет в метке [0], тогда метка [10] не существует. Похоже, ответ Гилада обратился к этому. – KSib

+0

@ Tészta Sajtos - На этот раз можно было понять проблему из кода, но в следующий раз, пожалуйста, когда вы говорите «не работает», укажите, что происходит: исключение, неожиданное поведение/вывод .... –

ответ

10

Вы инициализирует новый Label1 массив в каждой итерации, так что вы будете в конечном счете, только последний с 1 пункта на последнем месте.

Переместить декларацию label1 снаружи цикла:

//Move this line outside of the loop's scope 
Label[] label1 = new Label[10]; 

//Loop from 0 to the Length of the array instead of repeating 10 again 
for (int x = 0; x < label1.Lenth; x++) 
{ 
    label1[x] = new Label(); 
    label1[x].AutoSize = true; 
    label1[x].Text = "text"; 
    label1[x].Left +=10; 
    label1[x].Top +=10; 
} 

Я рекомендую вам посмотреть в MSDN об использовании массивов:

4

Для того, чтобы избежать таких ошибок (неправильное заполнение из) , попробуйте создать массивы:

int n = 10; 

Label[] label1 = Enumerable 
    .Range(0, n) 
    .Select(x => new Label() { 
    AutoSize = true, 
    Text = "text", 
    Left = x * 10, 
    Top = x * 10, 
    }) 
    .ToArray(); 
+1

Мне нравится linq и это отличный инструмент, но я думаю, что для этого случая для этого уровня это решение является излишним. Это довольно базовое знание обработки массива. –

+0

Кажется, это достаточно тонкий ответ, но это, безусловно, немного для предполагаемого новичка. – KSib

+1

Этот вид решения (генерация) позволяет забыть о * создании массива *, * диапазоне индексов *; например код в вопросе использует '10' как * волшебное число * в' (для .. x <= 10 ...) 'и в создании массива' new Label [10]; 'неправильная индексация (вместо 1 вместо нуля основанный) и т.д. –

Смежные вопросы