【发布时间】:2011-04-13 15:59:23
【问题描述】:
我有一个应用程序必须根据一些输入数据计算一些数字。此数据可以来自文件,也可以手动输入(只有 5-6 个值)。我想展示一个对话框,基本上询问“您是要从文件中加载数据还是手动输入?”。如果选择“加载”,我想呈现一个文件打开对话框,然后解析所选文件以提取相关数据。如果选择“手动”,我想展示一个自定义 CDialog 子类,用户可以在其中输入从数据文件中提取的相同数据。
我的主要问题是什么被认为是串起来的最佳实践?
我应该像这样顺序调用对话框吗?
// pseudocode
void foo(){
status = MessageBox("Do you want to enter data from file?");
if (status == YES) {
filename = CFileDialog();
inputdata = processInputFile(filename);
}
else {
CManualEntryDialog.doModal();
inputdata = CManualEntryDialog.data;
}
// calculate output data from input data...
}
或者我应该继承 CDialog 并从子类事件处理程序中调用 CFileDialog 和 CManualEntryDialog?
【问题讨论】:
-
一个对话框和面板/标签两种输入有什么问题? (如果你想真正划分它,或者在同一个对话框中加载用户控件)[只是好奇]
-
这没什么错,只是我不知道该怎么做。
-
我应该提到这是 MFC,而不是 .NET。
-
这些实际上不是连续的,除非您计算 MessageBox。否则,这看起来很合理。就个人而言,我有两个不同的菜单选项(数据/导入...和数据/手动输入...),但这是 UI 的事情。或者,显示手动输入对话框,并在其上放置一个 Import... 按钮。
-
打开是/否对话框(消息框)并根据结果打开另一个对话框没有任何问题。您真的不必经历为对话框子类化的所有麻烦。但从 UI 的角度来看,我宁愿只显示一个对话框而不是两个。一种选择是使用两个不同的菜单选项,就像 Roger 提到的那样,但是如果您没有菜单,您也可以默认显示手动数据输入对话框,并有一个从文件导入数据的按钮。这样,至少一个用例只需要一个对话框。
标签: c++ visual-studio visual-c++ mfc dialog