Заказ формы Windows с использованием MDILayout - PullRequest
0 голосов
/ 15 сентября 2008

У меня очень специфическая проблема с использованием C # и приложения Windows MDI Form. Я хочу показать пользователю два (или более) изображения: «левое» и «правое». Имена изображений скрываются от пользователя, а затем пользователь выбирает, какое изображение он предпочитает (это является частью исследования, касающегося качества медицинского изображения, поэтому пользователь должен быть ослеплен от, возможно, соответствующих параметров захвата, которые могут быть обнаружены в имя изображения). Вместо того, чтобы показывать реальные имена, пользователю показываются замещающие имена, такие как «изображение 0» и «изображение 1» (и т. Д.).

Всякий раз, когда я использую стандарт MDILayout.TileVertical или TileHorizontal, изображения загружаются в обратном порядке. Например, если у меня есть изображение 0 и изображение 1, они отображаются

Изображение 1 Изображение 0

Три или более изображения будут выглядеть примерно так:

2 1 0

или

3 2

1 0

И так далее. Проблема в том, что мои пользователи смущены этим правом на лево, и если у меня есть другое диалоговое окно, которое спрашивает их, какое изображение лучше (или оценить отображаемые изображения), они всегда путают порядок изображений на экране с порядком. изображений в диалоговом окне. То есть, если я просто упорядочиваю изображения 0 1 2 3 и т. Д. В диалоге оценок, они предполагают, что изображение 3 при отображении является изображением 0 в родительском окне MDI, изображение 2 - это изображение 1 и т. Д. - они читают слева направо и изображения отображаются справа налево. Если я перегруппирую вкладки в диалоговом окне оценок, чтобы отразить порядок на экране, это еще больше запутает их («Почему изображение 3 перед изображением 2?»), И результаты получатся в неправильном порядке и, как правило, не будут использоваться.

Итак, как принудительно упорядочить отображаемые окна, используя MDILayout в C#? Нужно ли делать это вручную или есть какой-то переключатель, который я могу отправить диспетчеру макета?

Спасибо!

Ответы [ 5 ]

1 голос
/ 16 сентября 2008

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

1 голос
/ 15 сентября 2008

Почему вы используете интерфейс MDI? Конечно, более подходящим будет одно окно с TableLayoutPanel или аналогичным предоставлением макета. Единственная причина, по которой вы хотите использовать макет MDI, - это позволить пользователям перемещать окна, что, насколько я могу судить из вашего описания проблемы, в любом случае нежелательно?

0 голосов
/ 15 сентября 2008

Спасибо Оуэну и Гроки, но интерфейс Single-Form просто не будет работать. Во-первых, у меня уже есть код отображения в формате MDI, так что перезапись потребует очень, очень большой перезаписи кода. Мне потребовалось около трех недель, чтобы написать основы приложения некоторое время назад; это не jpgs, которые я показываю здесь, это изображения DCM, и каждое из них имеет хорошие 30 МБ с различными вспомогательными инструментами, которые я не видел за пределами медицинской визуализации.

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

Однако, так как я контролирую способ отображения изображений, я могу принудительно установить z-порядок, и тогда это должно сработать, верно? Это основа ответов Фреда и Оуэна, если я правильно их читаю. Пользователь входит в «режим оценки», а затем программа загружает изображения, показывает их, и только после того, как пользователь ввел оценку, изображения закрываются. Принимая во внимание это ограничение, я, вероятно, могу применить конкретный порядок z (возможно, путем циклического перехода от длины к 0, а не от 0 к длине).

0 голосов
/ 15 сентября 2008

Я настоятельно рекомендую следовать совету Groky и использовать для этого единый интерфейс, а не MDI.

Если вы должны использовать MDI, вам нужно знать, что методы макета MDI используют Z-порядок форм MDI, чтобы определить, где заканчиваются формы. Например, если изображение 2 находится позади изображения 1, то изображение 1 будет слева, а изображение 2 будет справа. Наиболее логичный способ добиться этого - загрузить форму изображения 2, затем форму изображения 1, а затем выполнить макет MDI. Вы также можете использовать метод ActivateMdiChild для размещения форм в определенном порядке (активация одной формы ставит другие формы позади нее).

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

0 голосов
/ 15 сентября 2008

Можете ли вы избежать этой проблемы с помощью (перед отображением изображений):

  1. Поместить ссылки на изображения в структуру (массив или аналог).

  2. Рекурсивная функция создает структуру в обратном порядке (или переупорядочивает оригинал).

  3. Используйте новую структуру обратного порядка для построения дочерних окон, как и раньше.

Это добавило бы еще один слой, но могло бы решить вашу проблему, если бы никто не нашел переключатель обратного порядка расположения достаточно скоро.

...