D Forms Library TableLayoutPanel?

Каждый раз, когда я пытаюсь использовать D Forms Library, я сталкиваюсь с тем, что у него нет TableLayoutPanel - что делает его практически невозможно для меня сделать хороший графический интерфейс.

Есть ли какая-либо реализация TableLayoutPanel для DFL?
Как люди обычно используют эту библиотеку без нее?

Edit:

Ссылка на другую программу, использующую DFL, станет отличным подарком для ответа.:)

Ответ 1

Проводка в качестве ответа, поскольку длина превышает ограничение длины комментария.

Я отклонил ваш вопрос, потому что он сформулирован с элементами пламени. Я бы предположил, что ваш предыдущий опыт работы с библиотеками GUI был в основном с библиотеками, поддерживающими макеты ящиков, такие как Qt. API Win32 GUI сам по себе не предоставляет примитивов для создания макетов коробки - он использует сквозные координаты. Это остается неизменным во многих библиотеках OO, которые строятся поверх API, таких как MFC. Некоторые библиотеки, такие как VCL, имеют необязательные примитивы для создания макетов (панелей с выравниванием и автоматическим размером), но в конце концов, все репозиционирование управления должно выполняться приложением или графическим интерфейсом, поэтому что-то вроде этого нужно будет быть реализованы в DFL с нуля.

Итак, чтобы ответить на ваши вопросы:

Есть ли какая-либо реализация TableLayoutPanel для DFL?

Возможно, нет.

Как люди обычно используют эту библиотеку без нее?

Они рисуют элементы управления в форме с помощью мыши, используя Entice Designer. (То же самое верно для MFC/Visual Studio, VCL/Delphi IDE и т.д.)


Ответить на комментарий:

как мне помещать вещи в макет таблицы (например, два бок о бок и один ниже)?

Я понимаю, что вы хотите иметь панель с фиксированной высотой внизу и разделить оставшееся пространство на две области, которые при изменении формы будут оставаться на половину ширины формы.

  • В Entice Designer поместите панель, установите ее dock на BOTTOM. Установите его высоту соответствующим образом.
  • Поместите вторую панель, установите ее dock на RIGHT.
  • В вашем коде формы добавьте следующий метод:
    protected override void onResize(EventArgs ea)
    {
        super.onResize(ea);
        panel2.width = this.clientRectangle.width / 2;
    }

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

Или вы говорите, что плохая идея в первую очередь?

Определенно не моя точка зрения - преимущества семантических макетов, которые не требуют использования встроенной среды разработки, хорошо видны. Просто из-за их корней API Win32 библиотеки Windows GUI редко предоставляют хорошие средства для их создания. Конечно, их отсутствие не делает создание GUI невозможным или даже трудным - люди просто обычно идут с формами фиксированного размера и т.д. (Это ясно видно для конечных пользователей, переходящих из Windows в KDE - большинство диалогов KDE изменяются по размеру, а Windows 'нет.)

Ответ 2

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

вы можете использовать соблазнительный дизайнер, чтобы сделать gui и построить дальше на сгенерированном источнике

Ответ 3

Теперь, когда я рядом с моим кодом, есть два способа управления макетом. Как упоминалось храповым механизмом, есть абсолютные позиции, а также стыковка. Стыковка помещает элемент в 5 возможных местоположений. Верхний, нижний, левый, правый или центральный (заливка). Затем вы можете поместить панель в одну из них, которая сама может содержать элементы, которые состыкованы внутри нее. Вы присваиваете значение док-станции свойству dock.

Entice Designer написан с DFL.