2016-12-10 2 views
0

Я внедрил flowlayoutpanel для отображения изображений в виде лайтбоксов. Мне нужно добавить новые изображения в FLP не в конце, а как ведущие изображения. Для этого я создал список с новыми изображениями и в этот список. Я добавил изображения FLP перед операцией добавления. Затем я очистил элементы управления FLP и добавил все изображения из временного списка. Все это прекрасно работает, за исключением того, что я хотел бы сохранить прокрутку первого изображения. Я хотел бы знать, как прокручивать элемент управления до верхней части панели. С помощью ScrollControlIntoView изображение становится видимым, но оно не прокручивается вверху панели.Прокрутите элемент управления до видимой вершины Flowlayoutpanel

Пожалуйста, найти следующие 2 изображения, чтобы описать требование яснее:

first image показывает ситуацию перед добавлением выше новой строки. Затем после добавления новых изображений над отмеченным изображением (красная стрелка) 2nd image показывает, что нужно прокручивать новую желтую строку.

Я хотел бы, чтобы прокрутить желтый отмеченные грести из окна, так что заметное изображение остается на своей позиции

ответ

1

The FlowLayoutPanel.AutoScrollPosition имеет решающее значение, чтобы получить это право. Он определяет, как далеко прокручивается панель и тем, насколько свойство местоположения элементов управления было настроено для реализации прокрутки.

Итак, первое, что вы хотите сделать, это получить свойство местоположения элемента управления и отрегулировать его, вычитая AutoScrollPosition, чтобы восстановить исходное местоположение проекта. Тогда вы, вероятно, захотите вычесть маржу элемента управления. Затем вы узнаете новый AutoScrollPosition, чтобы получить его сверху. Предполагая, что он будет прокручиваться вверх, обычно не работает для элемента управления внизу, а не для чего-то, что вам нужно проверить.

Таким образом:

private void ScrollPanelTo(int index) { 
     var ctl = flowLayoutPanel1.Controls[index]; 
     var loc = ctl.Location - new Size(flowLayoutPanel1.AutoScrollPosition); 
     loc -= new Size(ctl.Margin.Left, ctl.Margin.Top); 
     flowLayoutPanel1.AutoScrollPosition = loc; 
     ctl.Focus(); 
    } 

Протестировано:

int index; 

    private void button9_Click(object sender, EventArgs e) { 
     ScrollPanelTo(index); 
     index = (index + 1) % flowLayoutPanel1.Controls.Count; 
    } 
1

Чтобы изменить положение, попробуйте этот код:

int currentPosition = FLP.Controls.GetChildIndex(controlToMove); 
FLP.Controls.SetChildIndex(controlToMove, currentPosition - 1); 

Или просто позвоните BrintToFront() метод управления, который вы хотите переместить в начало.

+0

Спасибо Марк, но это недоразумение. я четко не объяснял это требование. Я не хочу, чтобы сместить один элемент управления вверх, но я хочу переместить новые добавленные элементы в элемент управления с помощью прокрутки. Я предоставлю 2 изображения. –

+0

Хорошо, я вижу. Не могли бы вы также поделиться кодом, чтобы я мог воспроизвести проблему на моей стороне? – Marc

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