Tag: 对话框

在BackgroundWorker运行时显示模态窗口,而不会出现STA / MTA问题

我正在研究WPF应用程序。 我有一个耗时的方法,我想通过BackgroundWorker运行异步。 当该方法运行时,我想显示一个模态“Please Wait …”对话框窗口,该窗口必须在BackgroundWorker完成时自动关闭。 我目前对BackgroundWorker或任何multithreading编程的经验很少。 下面的代码当前导致InvalidOperationException ,消息“调用线程必须是STA,因为许多UI组件需要这个”。 请告诉我如何实现我想要实现的目标,以及额外的布朗尼点,如果你能帮我理解出了什么问题。 非常感谢! 编辑只是澄清 – 想法是主线程启动BackgroundWorker ,然后显示modal dialog。 当工人完成时,它会关闭modal dialog。 当模式对话框关闭时,主线程继续。 public class ImageResizer { private BackgroundWorker worker; private MemoryStream ImageData { get; set; } // incoming data private public MemoryStream ResizedImageData { get; private set; } // resulting data private Dialogs.WorkInProgressDialog ProgressDialog; // Public interface, called by […]

如何在ShowDialog()阻塞调用之前注册消息处理程序?

我正在使用Messenger类来在视图模型之间发送数据。 有一个AppView在内容控件中托管两个主视图,到目前为止,以这种方式发送/接收数据没有任何问题。 问题: 现在我添加了一个ProductView ,它显示了一个单独的AppView对话框。 但是当我调用Messenger.Default.Send(SelectedProduct); 在调用.ShowDetailDialog()之后,这会阻止Send代码调用,直到对话框关闭。 我试着反过来,首先调用Send代码,然后打开对话框。 但这意味着接收VM中的消息处理程序在发送消息之前不会及时注册。 有没有人知道一个解决方案,以防止对话框阻止发送呼叫? 或者在发送消息和显示对话框之前注册ProductVM消息处理程序? 以下是相关课程的摘要: CustomerOrdersVM(发送代码): private void EditOrder(object obj) { _dialogService.ShowDetailDialog(); Messenger.Default.Send(SelectedProduct); } ProductVM(接收代码): public ProductViewModel() { Messenger.Default.Register(this, OnSelectedProductReceived); } DialogService: class DialogService : IDialogService { Window productView = null; public DialogService() { } public void ShowDetailDialog() { productView = new ProductView(); productView.ShowDialog(); } } AppVM(主VM已注册,ProductVM独立于此VM): public […]

使用2 DialogForm删除数据

嗨我有问题从2表格对话框中删除数据 在第一个dialogform中它包含数据列表,在第二个dialogform中它包含数据的详细信息和删除按钮…我已经成功删除了数据库中的数据,但我很困惑如何从列表中删除数据… 如果只是选择数据并删除,我知道可以使用此代码完成 quizzes.RemoveAt(listBoxQuizzes.SelectedIndex); 但是这里的dialogform1问题不可用按钮删除,只是查看详细信息数据。 所以如果用户想删除数据,他必须打开dialogform2(详细数据)我已经用这段代码删除了数据库中的数据 Global.deleteData(“DELETE FROM Quiz_Occurrences WHERE ID = ” + id); 并关闭detaildataform(dialogform2) this.Close(); 并转到dialogform1(listdatabox)这里的问题,我刚刚删除的数据因为它还没有删除(已经从数据库删除但没有从列表中删除) 。 并需要重新启动程序以查看删除数据的效果 更新进度 我将数据更改为全局变量,因此技术上我可以删除dialogform2中的数据 这是代码(dialogform1中的修饰符列表框) int no = 1; foreach (CQuizOccurrence myQuizOccurrence in Global.quizOccurrences) { } 如果我想从dialogform1中删除它,我可以使用 Global.quizOccurrences.removeAT(listBoxQuizzes.SelectedIndex); 但如果我想从dialogform2中删除它 Global.quizOccurrences.removeAT(………); //still not have idea how can i reference index 从@nitin 更新解决方案 所以首先我写在formdialog2 public Frmdialog1 frm_dialog { get; […]

在C#中手动复制文件时显示复制文件对话框/表单?

我通过C#手动复制一些文件夹和文件,我想向用户显示实际发生的事情。 目前,该程序看起来好像已冻结,但它实际上是在复制文件。 我认为已经有一个显示该过程的内置对话框或表单,类似于在Windows资源管理器中复制/移动文件。 有什么可用的,或者我必须从头开始创建一切? 此外,这是向用户显示某些内容正在积极进行的最佳方法吗? 谢谢您的帮助!

获取C#save对话框的文件路径

我有一个保存对话框,当我按下按钮时会弹出。 但是我不想在那时保存文件,我想取名称并将其放在按钮旁边的文本框中,以便稍后使用该名称。 任何人都可以告诉我如何从保存对话框中获取文件路径以便以后使用它吗?

首次启动应用程序时显示对话框

当程序第一次启动(并且只是第一次),某种指令或指定设置时,是否有一种简单的方法来显示对话框?

在C#Winform上使用Show Dialog时非常奇怪的错误

我在VS Studio 2008 Express Edition中创建了2个表单,并在main program.cs文件中使用public static声明它们 我只是想用ShowDialog和Close在两个表单之间切换,但是当试图关闭第二个表单并再次使用showdialog打开第一个表单时,它表示当表单已经可见时我不能使用showDialog,而事实并非如此在显示第二个表格之前关闭它。 它让我在使用showdialog之前将form visible属性设置为false,所以我做到了 internal static void CloseSecondForm(FirstForm FirstForm) { FirstForm .Close(); SecondForm.Visible = false; SecondForm.ShowDialog(); } 但后来它说我不能使用ShowDialog,因为表格已经在对话模式中显示,我必须关闭它。 所以我做了它所要求的 internal static void CloseSecondForm(FirstForm FirstForm) { FirstForm .Close(); SecondForm.Visible = false; SecondForm.Close(); SecondForm.ShowDialog(); } 但它仍然假装已经使用ShowDialog打开了表单! 这是我的编程或Winform中的Bug吗? 更新:这是我在第5个答案中发布的整个代码(我想使用showdialog而不是show,因为我可能在后台有第3个表单,我不希望用户访问): [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 = new Form1(); Form2 = […]

使用MVVM从WPF应用程序启动对话框/子窗口的标准方法

总而言之,我想知道使用MVVM模式从WPF启动[子]对话框/窗口的公认最佳方法/行业标准。 我遇到过以下文章: A. CodeProject – 使用MVVM模式时显示对话框 这种方法看起来不错,但对我来说太过分 这是一定程度的代码复制,我不相信这是正确的方法。 B. WPF MVVM和显示对话框 这简要地介绍了三个选项,其中包含各种链接,这些链接在解释方法或主题方面都相当/非常差。 有人可以提供一个行业标准方法/方法的解释,从使用MVVM的WPF应用程序启动对话框,最好是一些链接到进一步的阅读材料? 如果你能自己提供一个例子我当然会非常感激! 谢谢你的时间。

不使用对话框调用自定义IInternetSecurityManager

你好,谢谢你的期待。 问题描述: 我已经实现了嵌入浏览器控件的ac#WinForm应用程序,并实现了IInternetSecurityManager来执行我们需要的任务,以允许在iframe中使用我们本地安装的网页进行跨域访问。 使用IInternetSecurityManager,IOleClientSite,IDocHostShowUI和IDocHostUIHandler,所有事情都按预期工作。 换句话说,我们所有的实现都被浏览器控件调用。 问题是当浏览器控件中加载的网页具有调用window.showModalDialog()的脚本时:正在使用的浏览器控件实例不再与我们的客户端站点通信。 绝对没有QueryInterface调用或在上面提到的任何接口中调用任何其他方法。 对话框中的文档没有使用我假设的安全管理器实现,因为IE显示的对话框中的Web浏览器控件与我们称为SetClientSite()的对象不同。 题: 我们如何与这个新的浏览器控件交谈? 我们需要能够在IE(我们的IInternetSecurityManager实现)所显示的对话框中提供浏览器控件。 但是,我们永远不会有机会告诉它关于我们的客户网站,可以这么说。 换句话说,没有来自IE的通信通过一个界面告诉我们,“我是一个由IE创建的新浏览器控件,这里是我的IUnknown界面。这是你设置我的客户端站点等的机会” 如果IE收到这样的通知我们会很好。 结果是正在使用两个不同的安全上下文,并且我们的应用程序在使用iframe的对话框中失败,因为我们的IInternetSecurityManager实现未被使用。 源代码示例: 我已经凿掉了源代码来保护无辜者:)并且减少了我认为你可以在自己的Visual Studio 2010解决方案中使用的东西。 请阅读ReadMe.txt文件,了解有关问题,重复步骤等的信息。 我编写的测试网页显示了指导您完成样本使用的信息和步骤。 如果您对我要完成的工作或样品不够清楚有疑问,请告诉我。 请指教。 谢谢。 http://home.comcast.net/~lowrider2112/bin/TestIEHost.rar

最简单的方法来创建一个返回值的自定义对话框?

我想为我的C#项目创建一个自定义对话框。我想在这个自定义对话框中有一个DataGridView,并且还会有一个按钮..当用户单击此按钮时,会向调用者返回一个整数值,然后对话框自行终止.. 我怎样才能做到这一点?