2009-10-20 3 views
1

Вот мой код:Неровности при добавлении элементов управления на панель. Они показывают, чего хотят!

int ypos = 0; 

public void X() 
{ 
    MovieItem NewMovie = new MovieItem(); 
    NewMovie.SearchMovie(txtSearch.Text); 
    NewMovie.Location = new Point(0, ypos); 
    ypos += 196; 

    panel1.Controls.Add(NewMovie); 
} 

После запуска метода X около 4,5 раз, пятый или шестой добавлен пункт не добавляется, где он должен вместо этого он будет загружен wayyyy ниже.

изображение для ясности:

Как это выглядит ПРАВИЛЬНО в начале: alt text http://i36.tinypic.com/xfqphz.png

Как это выглядит НЕПРАВИЛЬНО после немного: alt text http://i34.tinypic.com/23t5ld0.png

Что я делаю не так, что это не так хорошо работает?

EDIT: Я использовал контрольные точки и обнаружил, что проблема возникает на пятом фильме, когда переменная YPos около 980. Почему это может быть? Он просто пропускает это местоположение.

+0

Получение 403 Forbidden на этих изображениях. – mgbowen

+0

Да, imgur прослушивается. Переключитесь на TinyPic, изображения должны теперь работать. :) –

+0

fyi, обе ссылки для изображений указывают на то же изображение –

ответ

4

ОК, проблема возникает, когда свойство панели AutoScroll установлено на true, а полоса прокрутки не находится в исходном положении: 0. Панель позиционирует элементы управления на ypos + vertical position of scroll bar !!

Либо установить AutoScroll = false; перед добавлением MovieItem затем true; после, но это приведет к сбросу позиции полосы прокрутки
или вычитать положение прокрутки бара от ypos при установке местоположения.

И решить эту проблему, но второй не лучше (нет прокрутки сброса бар):

public void X() 
{ 
    int vscrollPos = panel1.VerticalScroll.Value; 

    MovieItem NewMovie = new MovieItem(); 
    NewMovie.SearchMovie(txtSearch.Text); 
    NewMovie.Location = new Point(0, ypos - vscrollPos); 
    ypos += 196; 

    panel1.Controls.Add(NewMovie); 
} 
+0

Я пробовал это, но проблема не устранена. Я не знаю, в чем проблема. –

+0

Извините. Когда я тестировал, я не прокрутил панель, и когда я это сделал, проблема всегда была там. После некоторого рытья рефлектора я думаю, что нашел решение. См. Мое редактирование. – manji

+0

Спасибо МИЛЛИОН за этот ответ! Как вы это узнали? –

1

Я не знаю, как выглядит ваша структура класса, но это пустое пространство выглядит примерно так же, как и другие элементы управления. Возможно, где-то фильм не найден и, следовательно, ничего не показывает?

+0

Это то, что Dark, все фильмы, показанные на фотографиях, - это фильмы, которые я искал, чтобы проиллюстрировать эту проблему, и они найдены. Я не понимаю, почему пустое пространство. Может быть, это как-то связано с высотой панели и когда контент превышает X-высоту? Я что-то упускаю? –