答案可能是主观的.答案可能是直觉.我想答案可以从传统的模态与非模态辩论中找到答案.
但总的来说,你通常如何决定选择哪一个?他们的用例是什么?
谢谢.
有没有办法使用dojo创建非模态对话框窗口?jQuery UI支持模态和非模态对话框.我正在尝试将SilverLight应用程序转换为HTML/javascript,并发现使用dojo创建非模态窗口很困难.
在WPF应用程序中,我想实现以下似乎不能直接起作用的行为:
在主窗口(Window1)中,用户打开非模态窗口(Window2),非模态窗口可以显示模态对话框(Window3).
问题是,只要显示模态对话框,当用户关闭对话框时,主窗口就会在后台消失(假设有其他应用程序的窗口打开).
我使用的方式有什么问题Window.Owner和Window.Show()/ Window.ShowDialog(),它是一个错误还是根本不支持的东西?
以下简单的WPF应用程序演示了此行为:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window2 win = new Window2();
win.Owner = this;
win.Show();
}
}
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window3 win = new Window3();
win.Owner = this;
win.ShowDialog();
}
private void btnClose_Click(object sender, …Run Code Online (Sandbox Code Playgroud) 我想创建一个WPF窗口,其行为作为模式对话框,同时促进同一应用程序的某些其他窗口上的选定操作.这种行为的一个示例可以在Adobe Photoshop中看到,它提供了几个对话框,允许用户使用吸管工具从图像中进行选择,同时禁用几乎所有其他应用程序功能.
我猜测前进的方法是创建一个非模态的,始终在线的对话,并以编程方式禁用那些不适用于对话的应用程序功能.有没有一种简单的方法来实现WPF?或许我可以采用一种设计模式.
根据我之前的研究,我已经能够弄清楚如何在对话框周围的叠加层上触发实时点击事件以关闭对话框.但是,这会将此对话框功能的进一步发展限制为模态.如果我将对话框设置为非模态,则没有叠加来触发click事件.如何在不使用叠加点击事件的情况下单击外部对话框时,如何设置对话框(现在不是模态)?
这是我的对话框和随后的实时点击事件,它允许我从叠加层关闭对话框:
$("#dialog-search").dialog({
resizable: false,
height:dimensionData.height,
width: dimensionData.width,
modal: false,
title: dimensionData.title,
position: [x,y],
close: function(event, ui){
callBack(event,ui);
}
});
$('.ui-widget-overlay').live('click', function() {
$('#dialog-search').dialog("close");
});
Run Code Online (Sandbox Code Playgroud) 我在主菜单上使用标准的剪切、复制、粘贴操作。他们有捷径Ctrl-X,Ctrl-C和Ctrl-V。
当我打开一个模态表单时,例如 FindFilesForm.ShowModal,然后所有的快捷方式都在表单中工作。
但是当我打开一个非模态表单时,例如 FindFilesForm.Show,那么快捷方式就不起作用了。
如果 FindFilesForm 是活动表单,我认为这些操作应该有效。它的模态应该与它无关,还是我的想法错了?
尽管如此,我怎样才能获得在非模态表单上工作的快捷方式?
在 Cary 的回应之后,我进一步研究了它。对于某些控件,例如 TMemo 或 TEdit,这不是问题。
但它适用于其他一些人。具体来说,它发生的地方包括:
我会看看是否还有其他人并将他们添加到列表中。
这些都是我程序中重要的非模态形式。
所以我仍然需要一个解决方案。
好的。我真的需要这方面的帮助。所以这成为我悬赏的第一个问题。
我与 Cary 的讨论是通过他的回答以及那里的评论更详细地描述了我的问题。
正如我在其中一条评论中提到的,这里似乎讨论了一个相关的问题。
我需要的是一个解决方案或变通方法,这将允许Ctrl-X,Ctrl-C和Ctrl-V始终在非模态窗口中的 TComboBox 和 TFindDialog 中工作。如果这两个问题得到解决,我相信我的 TElTreeInplaceEdit 也能正常工作。
正如 Cary 所描述的,设置一个简单的测试程序只需要几分钟。希望有人能够解决这个问题。
只是要小心,似乎有些东西可以让它有时工作,但有时却不起作用。如果我可以更详细地隔离它,我会在这里报告。
感谢您为我提供的任何帮助。
Mghie 非常努力地寻找解决方案,他的 OnExecute 处理程序与他的 ActionListUpdate 处理程序相结合,可以解决问题。所以为了他的努力,我给了他公认的解决方案和赏金点。
但是他的 actionlist 更新处理程序并不简单,您需要在其中指定要处理的所有情况。假设还有您可能想要的Ctrl+A全选或Ctrl-Y撤消。一般的程序会更好。
因此,如果您在寻找答案时确实遇到了这个问题,请先尝试我提供的添加 IsShortcut 处理程序的答案。它对我有用,应该处理每种情况,不需要 OnExecute 处理程序,所以简单得多。Peter Beyond 编写了该代码,Uwe …
我在C#.NET下的表单模态有问题.假设我的主要形式为#0(见下图).此表单代表主要的申请表,用户可以在其中执行各种操作.但是,有时需要打开其他非模态表单来执行支持任务的其他主要应用程序功能.让我们说这是图像中的#1形式.在这个#1表单上可能会打开几个额外的模态表单(图像中的#2表单),最后,有一个进度对话框显示一个长的操作进度和状态,这可能需要几个几分钟到几个小时.问题是,在关闭所有模态窗体(图像中的#2)之前,主窗体#0不响应.我需要主要形式#0在这种情况下可以运行.但是,如果您在表单#2中打开非模态表单,则可以使用模式#2表单和新创建的非模态表单.我需要主窗体#0和窗体#1与其所有子窗体之间的相同行为.可能吗?或者我做错了什么?也许有某种解决方法,我真的不想将所有ShowDialog调用改为Show ...
图片http://img225.imageshack.us/img225/1075/modalnonmodalproblem.png
我正在使用一个名为customDialog的类,它基于http://effbot.org/tkinterbook/tkinter-dialog-windows.htm
.标准代码创建了一个子类Toplevel,并创建模态对话框.我正在尝试调整代码,以便它也可以创建无模式对话框.标准代码调用Toplevel构造函数,创建对话框,然后 self.wait_window(self)在最后执行,等待对话窗口被关闭.但我没有成功.
我天真的尝试是简单地跳过wait_window()(这是我的代码中的尝试在下面剪断).我尝试过其他一些东西,但对话框仍然是模态的,也就是说,我无法与应用程序的主窗口进行交互.是什么迫使它是模态的?通常,对话框包含小部件和几个按钮.
class Dialog(Toplevel):
def __init__(self, parent, title = None,modal=True):
Toplevel.__init__(self, parent)
self.transient(parent)
if title:
self.title(title)
self.parent = parent
self.result = None
body = Frame(self)
#register validators
self.validatePosInt = (body.register(self.OnValidatePosInt),
'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
self.initial_focus = self.body(body) #this calls the body function which is overridden, and which draws the dialog
body.grid()
self.buttonbox()
self.grab_set()
if not self.initial_focus:
self.initial_focus = self
self.protocol("WM_DELETE_WINDOW", self.cancel)
self.geometry("+%d+%d" % (parent.winfo_rootx()+50,
parent.winfo_rooty()+50))
self.initial_focus.focus_set() …Run Code Online (Sandbox Code Playgroud) 我们有一个主要形式和第二个非模态形式的应用程序,可以并排使用.我们的主窗体显示配置列表,而第二个非模态窗体更详细地显示配置.
当我们显示一个模态形式(从第二个非模态形式请求)时,主形式弹出第二个形式的前面,直到我们关闭该模态形式.
我该如何避免这种行为?我已经尝试以不同的方式创建最后一个模态形式('Applicaton.CreateForm','TForm.Create',设置父级),但仍然可以弹出主窗体.
有任何想法吗?
提前致谢!
我根据 w3schools 上的示例创建了一个模态对话。但我一直无法找到有关如何使其非模态的指导。即是否可以显示对话并且我仍然可以在后台按链接?
实际上,我想要实现的是允许对话框内的链接可单击,并允许其后面主页上的 JavaScript 对这些事件做出反应。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="connect-src * 'unsafe-inline';">
<style>
/* The Modal (background) */
.modal {
display:block; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow-y: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ …Run Code Online (Sandbox Code Playgroud)