Tag: 对话框

为什么我的WPF应用程序在显示WinForms对话框后不能正常关闭?

我在我的WPF应用程序中使用第三方WinForms登录对话框,由于某种原因,这使得我的WPF应用程序在调试时没有正确关闭。 如果我在登录之前退出winforms登录对话框,应用程序将正确关闭,但是如果我成功登录并启动WPF窗口,则退出窗口不会关闭应用程序。 我在App的OnExit方法中放了一个断点,它永远不会被调用。 我覆盖了我的主窗口的OnClosing方法,并且确实被调用但是甚至调用Application.Current.ShutDown()也没有正确退出应用程序。 我也尝试将我的应用程序的ShutdownMode设置为OnExplicitShutdown和OnMainWindowClose ,但这些都没有将其关闭。 我有的唯一提示是调试窗口中出现以下内容,但我不知道它试图告诉我什么。 The thread ‘vshost.RunParkingWindow’ (0xf74) has exited with code 0 (0x0). The thread (0x1b58) has exited with code 0 (0x0). 只有在Visual Studio中以调试模式运行时才会出现此问题。 无需调试即可运行应用程序正确关闭应用程序 任何人都可以指出我可能导致这种行为的正确方向吗? 编辑 WinForms登录对话框不是带有Show()或Close()方法的传统登录对话框,它是一个只有Login()和Logout()方法的静态类。 有人这样使用它: if (CompanyNamespace.ApplicationName.Login()) { var shell = new ShellView(); var context = new ShellViewModel(); shell.DataContext = context; shell.Show(); // When the Shell Window […]

CommonOpenFileDialog导致Windows窗体缩小

我一直在研究Windows窗体应用程序,并且最近添加了一个简单的设置页面,允许用户选择输出所在的文件夹。 OpenFileDialog是丑陋的,不好用,所以我在Windows API CodePack中添加了访问CommonOpenFileDialog的所有function。 当我打开CommonOpenFileDialog时,Windows窗体应用程序缩小到较小的大小,如附加的图像所示。 左边是程序正常,右边是打开对话框: 我之前和之后都试过检查表格的大小,这没有改变,所以我打了一个砖墙。 任何信息都有用,如果需要,我可以提供更多细节。 打开表单的代码是: CommonOpenFileDialog dialog = new CommonOpenFileDialog(); dialog.DefaultDirectory = selectedFolderTextBox.Text; dialog.IsFolderPicker = true; if (dialog.ShowDialog() != CommonFileDialogResult.Ok) return; selectedFolderTextBox.Text = dialog.FileName;

如何在wpf对话框中选择默认按钮?

我正在创建一个WPF对话框。 它就像我们的普通messagebox带有ok和cancel按钮。 如何创建这样的对话框,以便在打开对话框时选择“ Ok按钮?

C#/ WinForms:ShowDialog和随后的表格显示

由于我认为与此无关的原因,我有一个或多个与单个实例UI(表单)通信的线程。 在工作线程中,我需要报告进度或输入数据或简单选择。 所有这些都来自用户与UI的交互,当然,对于M $ .NET,所有UI都在主线程中运行。 显然,我需要处理UI(主)线程和工作线程之间的线程同步。 我通过正确validationInvokeRequired和公司来做到这一点。 在那里有一些文章和文章讨论InvokeRequired , IsHandleCreated , IsDisposed等中的不一致和细微之处,所以我不会谈论它。 我只需要说我的UI,即只是一个Form,应该显示为模态或无模式 ,具体取决于调用者的愿望。 一个可能只是UI.Warn( “Warning!” )而其他可能是UI.Question( “Make a choice:”, options… ) 。 现在考虑下面的M $ DN文档摘录: Form.ShowDialog方法: 与非模态表单不同,当用户单击关闭表单按钮时,.NET Framework不会调用Close方法… 我从未参加过一个显示为模态的表单,但是他们的实现者说它不会被破坏,在关闭(隐藏)后可能会处于不可用的状态。 但确实如此! 当表单从ShowDialog( )返回时,它的Handle被删除了,因为它相信当再次需要它时,将调用ShowDialog( )并重新创建句柄。 我不知道为什么M $的东西需要这样做,但我只是觉得我能够拥有完全像模态或无模式的完全相同的forms而没有问题。 M $ DN docs没有说它是被禁止的(或者我太醉了而无法找到它)! 好吧,最后它是一种相对简单(和肮脏)的方法来修复它。 var r = ShowDialog( ); // Handle thrown away aftr “ShowDialog()” supposing the // […]

在回发后显示带有MVC C#的弹出确认消息

使用MVC框架与C#编码。 视图以标准HTML代码编写。 一旦用户点击提交按钮,我需要一条确认消息“您的消息已被发送” 这是控制器: public ActionResult Index(ContactViewModel contactVM){ if (!ModelState.IsValid) { string url = Request.UrlReferrer.AbsolutePath+ “#contact”; return View(); } else { var contact = new Contact { Name = contactVM.Name, Email = contactVM.Email, Subject = contactVM.Subject, Message = contactVM.Message }; new Email().Send(contact); return RedirectToAction(“Index”); } 这是视图: 请帮助。

如何通过单个WinForm对话框获取文件夹或文件路径?

更新:似乎我不清楚我的问题是什么。 约翰阿伦对我的头衔的编辑似乎也引起了更多的误解。 标题更改为“我如何获取文件夹或文件路径?” 这不是我追求的。 我知道有一个对话框可以处理文件,另一个对象可以处理文件夹。 我知道这些对话框中的每一个都可以返回文件夹或文件的路径。 我说我不确切知道如何获取文件路径,但即使我知道如何操作它也没有帮助我。 正如我原来的问题所述: “我让用户通过某个对话框选择文件夹或文件。我不知道路径是属于文件夹还是文件。一旦用户点击”打开“按钮,我想要当前选择的目录或要存储在字符串中的文件路径。“ 我在这里的意思是我想使用一些可能存在或可能不存在的对话框。 我不知道用户是在文件或文件夹之后。 用户知道这一点,但用户不知道路径。 这就是使用对话框的原因。 用户将搜索所需的文件或文件夹,然后单击“打开”。 根据我的需要使用单个对话框更有意义。 我想看看是否存在这样的对话框,因为我对.NET Framework的体验有限。 Jared Kells的答案几乎就是我所寻找的。 在阅读了他提供的内容后,似乎不存在这样的对话框。 我将不得不提供自己的实现。 由于提出我自己的实现可能会耗费时间和困难,我现在将不会这样做。 如果某人提供了非常有用的答案,我会等几天选择答案。 感谢那些贡献的人,即使它不是我所追求的。 原始内容: 我正在寻找一种获取文件夹或文件的文件路径的方法。 我玩过OpenFileDialog和FolderBrowserDialog但没有取得多大成功。 我能够使用FolderBrowserDialog.SelectedPath获取文件夹路径。 使用OpenFileDialog类,我无法弄清楚如何获取文件路径。 即使我能弄明白,我仍然处于困境中。 我让用户通过某个对话框选择文件夹或文件。 我不知道路径是属于文件夹还是文件。 一旦用户点击“打开”按钮,我希望当前选择的目录或文件路径存储在字符串中。 似乎我使用的每个类都被文件或文件夹困住了。 这是否可以使用WinForms对话框? 我不想在此时编写自己的对话框。

C#中的自定义对话框?

我有一个按钮,当单击时,会打开一个对话框,其上有各种控件,如单选按钮和文本框。 如果确定,则该对话框中的值将传递回按钮,其余代码将使用这些值进行处理。 如果取消则不做任何事。 我怎样才能做到这一点? 我正在考虑使用这些控件制作另一个表单,并让该按钮调用新表单,但我希望其余控件停止,直到表单像对话框一样完成。

在显示另一个之前隐藏所有可见的Metro对话框

我在我的WPF项目中使用MahApps.Metro ,我正在构建一个类来帮助我显示Dialogs 。 我想知道是否有办法在显示另一个之前关闭所有可见对话框。 有时,当我显示ProgressDialog然后显示MessageDialog ,ProgressDialog没有正确关闭,并且保持在后台,所以当我关闭MessageDialog时,它会在那里冻结UI。 这是我目前正在尝试隐藏所有对话框的方式: public static async void HideVisibleDialogs(MetroWindow parent) { BaseMetroDialog dialogBeingShow = await parent.GetCurrentDialogAsync(); while (dialogBeingShow != null) { await parent.HideMetroDialogAsync(dialogBeingShow); dialogBeingShow = await parent.GetCurrentDialogAsync(); } } 我称之为: public static MessageDialogResult ShowMessage(String title, String message, MetroWindow parent, Int32 timeout, MessageDialogStyle style, MetroDialogSettings settings, MessageDialogResult defaultResult) { AutoResetEvent arEvent = new […]

WPF模式进度窗口

如果这个问题得到了很多次回答,我很抱歉,但我似乎无法找到适合我的答案。 我想创建一个模态窗口,在我的应用程序执行长时间运行的任务时显示各种进度消息。 这些任务在一个单独的线程上运行,我可以在进程的不同阶段更新进度窗口上的文本。 跨线程通信都很好地工作。 问题是我不能让窗口只在其他应用程序窗口(不是计算机上的每个应用程序)之上,保持在最顶层,阻止与父窗口的交互,并仍然允许工作继续。 这是我到目前为止所尝试的内容: 首先,我的启动窗口是一个自定义类,它扩展了Window类,并具有更新消息框的方法。 我在早期创建了一个新的splash类实例,并根据需要显示/隐藏它。 在最简单的情况下,我实例化窗口并在其上调用.Show() : //from inside my secondary thread this._splash.Dispatcher.Invoke(new Action(() => this._splash.Show()); //Do things //update splash text //Do more things //close the splash when done this._splash.Dispatcher.Invoke(new Action(() => this._splash.Hide()); 这会正确显示窗口并继续运行我的代码来处理初始化任务,但它允许我单击父窗口并将其带到前面。 接下来我尝试禁用主窗口并在以后重新启用: Application.Current.Dispatcher.Invoke(new Action(() => this.MainWindow.IsEnabled = false)); //show splash, do things, etc Application.Current.Dispatcher.Invoke(new Action(() => this.MainWindow.IsEnabled = true)); […]

C#显示对话框线程

我有一个Dialog Box (导入程序),我用它来选择我要导入到应用程序的文件。 此Dialog Box (导入程序)还有另一个对话框(文件),它是一个OpenFileDialog 。 代码运行这样的东西 //Main File if (Importer.ShowDialog == DialogResult.Ok){ // Start Import } //Importer File OnDoubleClick of TextBox if(File.ShowDialog == DialogResult.Ok){ // Find File } 但是在第二个ShowDialog我总是得到以下错误: An unhandled exception of type ‘System.Threading.ThreadStateException’ occurred in System.Windows.Forms.dll Additional information: Current thread must be set to single thread apartment (STA) mode before OLE […]