2017-01-05 6 views
0

У меня есть кнопка, которая динамически добавляет до 24 меток в форму. Проблема заключается в их местоположении.Создание FlowLayoutPanel имеет прозрачный фон

Я понял, что вместо того, чтобы вручную настраивать определенное место для каждого, я могу их автоматически упорядочить, как это делает FlowLayoutPanel. Но FLP будет сверху и спрятать элементы управления под ним. И отправка его назад хуже. Поэтому я хочу довести его до фронта, но сохраняю его прозрачным, чтобы он не скрывал другие элементы управления под ним.

Любые предложения будут замечательными

Спасибо.

+0

«FlowLayoutPanel» - это не волшебство. Когда вы используете один, вам не нужно указывать «Местоположение» каждого дочернего элемента управления, потому что он содержит код для их вычисления. Если вы используете «Панель», то в нем нет такого кода, поэтому вы должны сами их вычислить. Это не так. Вы можете наследовать «Панель» и инкапсулировать этот код, но вам все равно придется писать код так или иначе. – jmcilhinney

+0

@ jmcilhinney - Хорошо, я отредактирую свой пост и сделаю все более ясным. (Путь более ясный ...) – TGamer

+0

При необходимости я опубликую скриншот моего дизайна – TGamer

ответ

1

Я могу настроить их автоматически, как это делает FlowLayoutPanel. Но я не могу использовать его, потому что он будет сверху и спрятать изображения в моих картинах.

Ну, вы можете использовать FlowLayoutPanel с прозрачным фоном, чтобы он не скрывал другие элементы управления, которые у вас есть. Как это сделать? Ну, this answer показывает вам, как сделать прозрачный Panel. Вы должны быть в состоянии легко настроить его для работы с FlowLayoutPanel, используя что-то вроде этого:

Public Class TransparentFLP 
    Inherits FlowLayoutPanel 

    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams 
     Get 
      Dim cp As CreateParams = MyBase.CreateParams 
      cp.ExStyle = cp.ExStyle Or &H20 ''#WS_EX_TRANSPARENT 
      Return cp 
     End Get 
    End Property 
    Protected Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs) 
     ''#MyBase.OnPaintBackground(e) --> Don't uncomment this orelse 
              'it will cause the BackColor to be redrawn. 
    End Sub 

End Class 
  • Добавить новый Class в проект.
  • Вставьте вышеуказанный код в него.
  • Восстановите свой проект.
  • Оставьте новый элемент управления сверху панели инструментов на свою форму (вместо использования оригинала FlowLayoutPanel).
  • Вы готовы пойти.

P.S. Я не уверен в использовании ваших 4 панелей, но вместо этого вы можете использовать TableLayoutPanel.

Надеюсь, что поможет :)

+0

Значит, вы говорите, что я снова сделал свой проект? копировать + вставить? Почему я не могу просто добавить свой код к моему? – TGamer

+0

Возможно, это под моим открытым классом. Как насчет этого? – TGamer

+0

@TGamer, я не сказал, создаю новый проект. Я сказал «Добавить новый класс в ваш проект». Меню проекта -> Добавить класс. –