0

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

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

图片 1 图片 0

三个或更多图像将类似于

2 1 0

或者

3 2

1 0

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

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

谢谢!

4

5 回答 5

1

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

于 2008-09-15T15:46:28.337 回答
1

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

于 2008-09-16T00:01:28.300 回答
0

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

  1. 将图像引用放在一个结构(数组或类似的)中。

  2. 让递归函数构建逆序结构(或重新排序原始结构)。

  3. 像以前一样使用新的逆序结构来构建您的子窗口。

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

于 2008-09-15T15:53:04.090 回答
0

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

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

它很复杂且容易出错,我强烈建议在一个表单上使用两个窗格的界面,但这会起作用。

于 2008-09-15T16:15:36.830 回答
0

感谢 Owen 和 Groky,但 Single-Form 界面无法正常工作。首先,我已经有了 MDI 格式的显示代码,因此重写将需要对代码进行非常非常大的重写。不久前,我花了大约三周的时间来编写应用程序的基础知识;这些不是我在这里展示的 jpg,这些是 DCM 图像,每张都有 30 mb 大小,还有我在医学成像之外从未见过的各种支持工具。

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

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

于 2008-09-15T17:22:32.100 回答