Заказ Windows Form с использованием MDILayout

У меня очень специфическая проблема с использованием 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#? Придется ли мне делать это вручную или есть какой-нибудь переключатель, который я могу отправить диспетчеру компоновки?

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 580
5

Ответы 5

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

Не могли бы вы избежать этой проблемы, (перед отображением изображений):

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

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

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

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

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

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

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

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

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

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

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

Да! Почему я должен помнить, какой из них мне нравится - просто дайте мне кнопку и позвольте мне ее щелкнуть.

quip 23.10.2008 03:09

Другие вопросы по теме