Проблемы при изменении размера формы с помощью splitcontainer - PullRequest
0 голосов
/ 02 мая 2019

Visual Studio 2019, Windows Forms и VB.У меня есть форма с разделительным контейнером, заполненным richtextbox на одной панели и сторонним элементом управления на другой (txtextcontrol: замена richtextbox, которая лучше обрабатывает таблицы) для отображения учебника и заметок.Я обрабатываю все изменения размера вручную, потому что я не мог настроить различные варианты закрепления и привязки, чтобы измерить и разместить все, где я хотел, и я могу получить более быструю и плавную прокрутку, чем при ее закреплении.Все отлично работало, когда я использовал два richtextbox.Но у меня были некоторые таблицы, которые отображались некорректно.

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

Проблема в том, когда я изменяю размер, либо перетаскивая границу Form1 или максимизируяили нормализуя форму, txtextcontrol не обновляет себя правильно, но это может частично быть побочным эффектом более основной проблемы, splitcontainer отказывается изменять свою ширину.В событии Form1_SizeChanged у меня есть строки:

SplitContainer1.Width = Me.Width - 32

SplitContainer1.Height = Me.Height - FlowLayoutPanel1.Height - 46

SplitContainer1.Top = FlowLayoutPanel1.Height 
'there's a row of floating buttons above the two panels

И ширина не меняется, но высота и вершина меняются.

Если я повторю команду ширины в конце моегоподпрограмма, иногда она работает в этот момент, а в других случаях происходит сбой программы с сообщением об ошибке: «коллекция была изменена после создания экземпляра перечислителя», и попытка перехватить ошибку с помощью команды «Попытаться ... поймать» не предотвращает сбой.Я думаю, что эта ошибка иногда возникала, когда вызов события splitcontainer.moved затем вызывал событие resize, которое пыталось внести изменения в splitcontainer, но это не кажется объяснением все время.И я не могу понять, почему высота меняется, но ширина не меняется (без стыковки и якоря не задействованы)

Если я вручную переместу сплиттер, это может в конечном итоге решить проблему;(В первый раз, когда я перемещаю его, txtcontrol получает правильный собственный размер, но он все еще сидит на панели, слишком узкой, чтобы показать все это. Во второй раз, когда я перемещаю Splitter, ширина панели тоже корректируется, и все в порядке, покаследующее изменение размера).

Кто-нибудь может выяснить, что происходит, и дать мне подсказки, как решить эту проблему?Может ли у dll для txtextcontrol быть какая-либо причина, чтобы предотвратить изменение размера панели, в которой он находится (но почему это повлияет только на ширину?), Или это просто отвлечение от большой ошибки, которая бросает мне в глаза?а я просто этого не вижу?

1 Ответ

0 голосов
/ 02 мая 2019

Выберите SplitContainer, найдите Anchor в свойствах, затем установите его во всех направлениях: сверху, слева, справа и снизу.

Или программно, в Form1_Load просто добавьте:

SplitContainer1.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right Or AnchorStyles.Bottom

Не путайте, Or - это оператор, действующий здесь как побитовый оператор для установки всех флагов AnchorStyles одновременно.

...