我是一个新手程序员,用C#在MonoDevelop中编写一个程序,并且在我的gtk MessageDialogs中有一个问题.
我的GTK消息对话框窗口边框上的关闭按钮需要双击才能实际关闭它们.对话的关闭按钮自动工作正常.有人请告诉我如何解决这个问题,下面是代码:
if (fchDestination.CurrentFolder == fchTarget.CurrentFolder) {
MessageDialog msdSame = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Close, "Destination directory cannot be the same as the target directory");
msdSame.Title="Error";
if ((ResponseType) msdSame.Run() == ResponseType.Close) {
msdSame.Destroy();
}
return;
}
if (fchTarget.CurrentFolder.StartsWith(fchDestination.CurrentFolder)) {
MessageDialog msdContains = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Close, "error");
msdContains.Title="Error";
if ((ResponseType) msdContains.Run() == ResponseType.Close) {
msdContains.Destroy();
}
return;
}
Run Code Online (Sandbox Code Playgroud)
单击对话框的"关闭窗口"按钮时给出的响应值不是CLOSE,但是DELETE_EVENT.这就是为什么destroy永远不会调用该方法并且对话徘徊的原因.第二次关闭它(超出方法的上下文run)时,对话框会被正常销毁.
简而言之,您还需要检查ResponseType.DeleteEvent.
更新:
在代码中:
MessageDialog msdSame = ...
...
ResponseType response = (ResponseType) msdSame.Run();
if (response == ResponseType.Close || response == ResponseType.DeleteEvent) {
msdSame.Destroy();
}
Run Code Online (Sandbox Code Playgroud)
或者,正如ptomato提到的那样,您不需要检查响应,考虑到用户只有一个选择:"关闭".
MessageDialog msdSame = ...
...
msdSame.Run();
msdSame.Destroy();
Run Code Online (Sandbox Code Playgroud)