使用MDILayout进行Windows表单排序

问题描述 投票:0回答:5

我使用C#和Windows MDI Form应用程序时遇到了一个非常具体的问题。我想向用户显示两个(或更多)图像,“左”和“右”图像。从用户隐藏图像的名称,然后用户选择他们喜欢的图像(这是涉及医学图像质量的研究的一部分,因此用户必须对可能相关的捕获参数不知情,这些参数可能在图片名称)。而不是显示实际名称,向用户显示诸如“图像0”和“图像1”(等)的替代名称。

每当我使用标准的MDILayout.TileVerticalTileHorizontal时,图像都会以相反的顺序加载。例如,如果我有图像0和图像1,则显示它们

图片1图片0

三个或更多图像将是类似的

2 1 0

要么

3 2

1 0

等等。问题是,我的用户对此左侧的权利感到困惑,如果我有另一个对话框询问他们哪个图像更好(或对显示的图像进行评级),他们总是将屏幕上图像的顺序与命令混淆对话框中的图像。也就是说,如果我只是在评级对话框中订购图像0 1 2 3等,他们会认为图像3显示为MDI父窗口中的图像0,图像2是图像1等 - 它们从左向右读取,图像从右到左显示。如果我重新排序评级对话框中的标签以反映屏幕上的顺序,那只会进一步混淆它们(“为什么图像2之前的图像3?”)并且结果输出错误,并且通常无法使用。

那么,如何在MDILayout中使用C#强制显示窗口的顺序?我是否必须手动完成,或者是否有一些我可以发送给布局管理器的开关?

谢谢!

c# winforms mdi
5个回答
1
投票

为什么使用MDI接口?当然,具有TableLayoutPanel或类似提供布局的单个窗口将更合适。你想要使用MDI布局的唯一原因是允许用户移动窗口,据我所知,从你对这个问题的描述中我看不出来是不可取的?


1
投票

另一个想法是将实际评级机制放在每个子窗口的底部。所以答案实际上附在他们的子窗口上的图片上,而不是在他们自己的区域有答案。


0
投票

您可以通过(在显示图像之前)避免此问题:

  1. 将图像引用放在结构(数组或类似)中。
  2. 有一个递归函数构建一个逆序结构(或重新排序原始)。
  3. 使用新的逆序结构来像以前一样构建子窗口。

如果没有人能够尽快找到反向布局顺序开关,它会增加一层,但可能会解决您的问题。


0
投票

我强烈建议遵循Groky的建议并使用单一形式的界面而不是MDI。

如果必须使用MDI,则需要知道MDI布局方法使用MDI表单的Z顺序来确定表单的最终位置。例如,如果图像2在图像1后面,则图像1将在左侧,图像2将在右侧。导致这种情况发生的最合理的方法是加载图像2的形式,然后加载图像1的形式,然后执行MDI布局。您还可以使用ActivateMdiChild方法以特定顺序放置表单(激活一个表单将其他表单放在其后面)。

这很复杂且容易出错,我强烈建议在单个表单上使用双窗格界面,但这样可行。


0
投票

感谢Owen和Groky,但单表单界面无法正常工作。首先,我已经有MDI格式的显示代码,因此重写需要非常非常大的代码重写。我花了大约三个星期才写出应用程序的基础知识;这些不是我在这里展示的jpgs,这些是DCM图像,每个都是30 mb,有各种支持工具,我在医学成像之外没见过。

其次,一些放射科医生不喜欢用于图像比较的分割筛选,而其他放射科医生则需要它。因此,为了适应两种类型的用户,我使用平铺进行设置,然后用户可以最大化图像,然后在它们之间切换。因此,MDI是针对不同口味的正确方法;与已经存在的(大部分)工作系统相比,具有非常复杂的选项卡控件集的单个界面听起来像是一场噩梦。

但是,由于我确实控制了图像的显示方式,我可以强制执行z排序,然后这应该可行,对吧?如果我正确地阅读它们,那就是Fred和Owen的答案的基础。用户进入“评估模式”,然后程序加载图像,显示图像,并且只有在用户输入评估后,图像才会关闭。鉴于该约束,我可以强制执行特定的z排序(可能通过从长度循环到0而不是从0到长度)。

© www.soinside.com 2019 - 2024. All rights reserved.