При запуске программы не происходит ресайз

При запуске программы не приходит событие ресайза. Приходится вызывать его обработчик самому:

        private void Form1_Load(object sender, EventArgs e)
        {
            Form1_Resize(sender, e);
        }

Это так и должно быть?

Наверно :man_shrugging:

Вместо вызова

я бы сделал отдельную функцию и вызывал в обоих.

Еще можно подписать оба события на этот обработчик. Тут не ограничено число обработчиков события как в Дельфи.


        public Form1()
        {
            ...

            Load += Form_Resize;
        }

Ответ профессионала :slight_smile:

Так была же тема уже эта. Проблема в том что выполнена неправильная разметка компонентов.

Так эта тема до той темы была )

ТС упорно решил написать свой костыль. )))

Проблема в том, что разработчики Windows forms забыли вызвать ресайз при первом появлении формы и упорно не хотят фиксить этот баг.

Так тут и там суть темы разная

Ну я начал использовать Anchor. Только, по-моему, сам Anchor это и есть костыль :man_shrugging: Почему нельзя вручную прописать то же самое кодом? Зачем тогда Left Top Width Height доступны не только для чтения?

Вы коды изучили этой версии дотнета?? Зачем при создании формы вызывать ресайз не понятно. События должны происходить именно в тот момент когда они объективно происходят. У вас в начале работы приложения создается форма заданных размеров. С какого перепугу нужно вызывать ресайз если разщмер не изменился??

Ну да. костыль. Но в комплекте с tableLayout он очень гармонично выручает и создает адаптивную разметку компонентов.

все там нормально работает. почему только для чтения то?

Потому что на низком уровне (WinAPI) оно именно так работает и это логично.

Вот и я говорю, что работает, только зачем они доступны не только для чтения, если изменять их вручную это прям фу-фу-фу? :thinking:

Ну они могут быть нужны в каких-то ситуациях, но лучше стараться без них.

С чего это логично то?? При создании формы ее размер не изменяется. Потому что до этого момента формы не существовало. Почему нужно вызывать событие изменения формы?

HWND hWnd = CreateWindow(
   szWindowClass,
   szTitle,
   WS_OVERLAPPEDWINDOW,
   CW_USEDEFAULT, CW_USEDEFAULT,
   500, 100, // вот вы задали размер с которым форма будет создана. 
   NULL,
   NULL,
   hInstance,
   NULL
);

В какой момент окно изменило свой размер то?? С чего вызывать событие ресайза то??

Ну если вы так уперлись рогом то всегда можно сделать такой костыль:


   private void Form1_Load(object sender, EventArgs e)
        {
            Size = new Size(Width, Height+1);
        }

В таком случае действительно будет логично.
И в целом то не понятно чего вы добиваетесь??
Если вы считаете что это баг то вот вам канал связи с МС Подайте заявку и вам официально ответят что к чему.

Если вы писали на апи и вас там все устраивало то может быть вернуться туда?? Вас же не заставляют под дулом пистолета использовать формы?

А зачем вам расставлять контролы по нужным местам в WM_CREATE, а потом делать то же самое в WM_SIZE? Это, по-вашему, было бы логичнее? :man_facepalming: Двойная работа получается. Больше телодвижений. Больше кода. Код менее читабелен.

Как не заставляют-то? Создатели этих ваших фреймворков и заставляют. Постоянно изобретая всё новые и новые велосипеды с квадратными колёсами, вроде WPF, где всё меньше и меньше контроля над программой.
Они объявляют удобное и логичное устаревшим, а не удобное и не логичное принимают как стандарт.

Каждое из сообщений несет свою смысловую нагрузку. одно дело создание и другое перестановка.

Не хотите - не пользуйтесь. Всем по барабану.

Ну тут кому шашечки а кому ехать. Если есть инструмент пусть и костыльный но за кратчайшие сроки способный стабильно решать задачу с заданной точностью то на остальные неудобства можно закрыть глаза.
Это вы тут раздули из мухи слона и пытаетесь несколько недель доказать что это важно. Получается спор ради спора.

Вот я и говорю, что вместо старых инструментов, которые почти никак не ограничивали возможные способы решения поставленной задачи, нам начали втюхивать новые инструменты с ограниченным (или вывернутым наизнанку) функционалом. А вы: “Ура! Так держать! Давайте ещё!” :man_shrugging:

С вами никто не спорит. Я просто привожу факты, почему одно хорошо, удобно и логично, и почему другое не хорошо, не удобно и не логично. А вы, почему-то, не хотите их принимать :man_shrugging:

да все устраивает. Никто вас не ограничивает ни в чем. ООП никто не отменял. Если такая тяга все менять под себя так вперед. Переопределяйте класс Window/Form и пишите свои реализации событий. Любой каприз можно реализовать как вам нужно. Вообще никаких запретов никто не накладывает.

Вы приводите только свое не объективное мнение. То что вам это нехорошо и неудобно это ничего не значит.

А зачем мне это если я не испытываю каких либо сложностей с использованием тех инструментов которые предоставляет система. Задачи решаются, процесс не стоит.

Если WinForms окончательно заменят на WPF, то переопределять уже нечего будет.

Вот видите, видите :grinning: Вы спалились :grin: Вы не хотите принимать объективные факты и сами упрямо продавливаете своё СУБЪЕКТИВНОЕ мнение мне хорошо, а значит другим не может быть плохо, считая его объективным
49e3f9a4b4e699e63eca7ddb4c86c363

Утверждаете что в WPF нельзя переопределить стандартный класс Window?? Интересно.

В чем объективное то?? В том что вам не нравится имеющиеся инструменты? Так это субъективное мнение.
Утверждение что при создании формы НЕ происходит изменения ее размеров, а следовательно нету никакого смысла вызывать функцию ресайза окна - логично.

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

Может и логично, но в следствии этого приходится придумывать дополнительные костыли типа Anchor и что там еще… А был бы один лишний ресайз в самом начале (в плане производительности его бы никто даже не заметил, он на низком уровне и так вызывается) и это избавило бы от костылей.

Дык если бы дело было только в событии ресайза, то это решается одной строкой.
Anchor не поэтому берут, а потому что так проще и удобнее.

Это не костыль а совершенно другая платформа, созданная для визуализации. Там совсем другие подходы к компоновке элементов и язык другой.

Все обработки событий должны происходить именно тогда когда происходят событие и никак по другому. Если вы начинаете ломать стандартную логику работы процессов значит очевидно что ваше приложение спроектировано некорректно. А оправдывать себя можно вечно.