2013-05-04 2 views
1

В настоящее время я пытаюсь заполнить TableLayoutPanel через метод, который идет следующим образом:Почему я не могу получить данные в методе?

private int _rowCount; 
public void InitPaths() 
{ 
    int c = 1; 
    int a = 1; 

    while (a < _PathRows.Length - 1) 
    { 
     var label = new Label(); 
     // 
     // Label - Format. 
     // 
     label.Dock = DockStyle.Fill; 
     label.AutoSize = false; 
     label.Text = _pfadZeilen[a]; 
     label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 
     label.Size = new System.Drawing.Size(22, 13); 
     label.BackColor = System.Drawing.Color.Transparent; 
     TableLayoutP.Controls.Add(label, 3, c); 

     //Checkboxen Einfügen 
     var cbox = new CheckBox(); 
     // 
     //Checkbox Format. 
     cbox.Anchor = System.Windows.Forms.AnchorStyles.None; 
     cbox.AutoSize = true; 
     cbox.CheckAlign = System.Drawing.ContentAlignment.MiddleCenter; 
     cbox.Name = "checkBoxPfad" + a; 
     cbox.Size = new System.Drawing.Size(15, 14); 
     cbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 
     cbox.UseVisualStyleBackColor = true; 
     TableLayoutP.Controls.Add(cbox, 0, c); 
     a++; 
     c++; 

    } 

    this._rowCount = BibTable.GetRowHeights().Length; // which seems to be Holding the value only within the method 
} 

, а затем удалить все строки на действия, по следующему методу:

public void RemoveRows() 
{ 
    for (int row = _rowCount; row >= 0; row--) 
    { 
     BibTable.RowStyles.RemoveAt(row); 
     BibTable.RowCount--; 
    } 
} 

Теперь проблема , если я пытаюсь сделать что-нибудь с TableLayoutP снаружи способа, где инициализируются все строки, он скажет мне:

объекта г eference не установлен в экземпляр объекта.

Что я могу сделать? Есть ли способ получить метод внутри метода (я понимаю, насколько глупо это звучит при наборе текста) или любым другим способом справиться с этой ситуацией?

+0

Какова связь между 'TableLayoutP' и' BibTable'. Я спрашиваю об этом, потому что вы инициализируете 'TableLayoutP' и вы удаляете из' BibTable'. Кажется логичным, если вы добавляете элементы в одну коллекцию, вы не можете удалить их из другого. –

ответ

0

Вы повторяетесь через GetRowHeights(), возвращая высоту каждой строки. Но вы удаляете из коллекции RowStyles, которая напрямую не связана с первой коллекцией. Я предполагаю, что GetRowHeights() возвращает намного больше строк, чем RowStyles имеет.

Почему нет:

BibTable.RowCount = 0; 
BibTable.RowStyles.Clear(); 
+0

Привет там Мартин, Thnx для вашего поста, Вещи является GetRowHeights() Длина, кажется, единственной вещью, которая обеспечивает правильное количество строк (23 в данном случае). что у меня есть, так как im вставляет их во время выполнения из текстовых данных, но BibTable.RowCount говорит ist только 6 строк (что неверно) Более подробное объяснение находится по ссылке ниже, спасибо за вашу помощь! http://stackoverflow.com/questions/16375030/cant-reach-data-within-method-what-possibilities-are-there – gbbb

+0

Как насчет свойства 'RowCount'? Он должен содержать правильное количество строк. –

+0

просто попробовал, RowCount сообщает = 6 (false) и BibTable.GetRowHeights(). Длина = 23 (правильно) – gbbb

0

Вы ittering через GetRowHeights(), возвращая высоту каждой строки. Но вы удаляете из коллекции RowStyles, которая напрямую не связана с первой коллекцией. Я предполагаю, что GetRowHeights() возвращает намного больше строк, чем RowStyles имеет.

Почему нет:

BibTable.RowCount = 0; 
BibTable.RowStyles.Clear(); 
+0

Martin, Я пришел к использованию GetRowHeights() после того, как я сделал некоторое исследование выше, (см. Http://social.msdn.microsoft.com/forums/en-US/winforms/thread/ff7a4ba4-bf73-47c2 -8689-fd93113fc31e) он выглядит так, как будто это единственный, который обеспечивает правильное количество строк в таблице, но настоящая проблема швов - это что-то еще, я не могу удалить строки вне моего метода InitPaths() , что я должен делать там? – gbbb