我注意到当 MessageBox 处于模式状态时,行为似乎不一致。
首先,从 UI 线程启动 MessageBox。这会产生一个模态 MessageBox,正如预期的那样:
void MainThreadClick(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello!");
}
Run Code Online (Sandbox Code Playgroud)
接下来,从后台线程启动。这会导致无模式 MessageBox,我猜是因为它不在 UI 线程上?
void WorkerThreadClick(object sender, RoutedEventArgs e)
{
ThreadPool.QueueUserWorkItem((x) =>
{
MessageBox.Show("Hello!");
});
}
Run Code Online (Sandbox Code Playgroud)
接下来,从后台线程启动,但分派到 UI 线程,导致它再次成为模态:
void WorkerThreadClick(object sender, RoutedEventArgs e)
{
ThreadPool.QueueUserWorkItem((x) =>
{
Application.Current.Dispatcher.Invoke(() =>
{
MessageBox.Show("Hello!");
});
});
}
Run Code Online (Sandbox Code Playgroud)
最后,这是一个奇怪的问题,与上面类似,但使用 FileSystemWatcher 线程会导致无模式对话框。为什么是这样?...它是在 UI 线程上调用的,那么为什么它不像前面的示例那样是模态的呢?
public MainWindow()
{
InitializeComponent();
m_watcher = new FileSystemWatcher()
{
Path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
NotifyFilter = NotifyFilters.LastWrite,
IncludeSubdirectories = true,
Filter = "*.*"
};
m_watcher.Changed += …Run Code Online (Sandbox Code Playgroud) 我正在开发 .net core 控制台应用程序。我想在想要退出应用程序时提醒用户。像下面这样;
MessageBox.Show("Contiue or not", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) == DialogResult.No)
Application.Exit();
Run Code Online (Sandbox Code Playgroud)
但我无法将 System.Windows.Forms 引用添加到我的项目中。我收到这个错误。
Error CS0234 The type or namespace name 'Forms' does not exist in the namespace 'System.Windows' (are you missing an assembly reference?)
Run Code Online (Sandbox Code Playgroud)
是否可以在.net core控制台应用程序上显示消息框?
我在VS2008,C#中使用Addin,我需要显示消息(错误消息和其他).
我不知道消息的长度,因此我想使用Scrollable MessageBox.
我从2007年开始发现这篇文章:Mike Gold 2007年7月30日
现在,2011年还有其他好的组件吗?我想评估一些有关它的组件.
更新:
另一个组件,但更旧:MessageBoxExLib http://www.codeproject.com/KB/dialog/MessageBoxEx.aspx
可自定义的.NET Winforms消息框. http://www.codeproject.com/KB/dialog/Custom_MessageBox.aspx
由于此应用程序的目标是平板电脑,因此拥有更大的MessageBox按钮会更好.
DialogResult dialogResult = MessageBox.Show(
message, caption,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button2);
switch (dialogResult)
{
case DialogResult.Yes:
// ...
Run Code Online (Sandbox Code Playgroud) 是否可以为用户插入TextBox以在Windows Phone 7中的MessageBox上输入文本?
谢谢.
我正在使用caliburn为MVVM制作一个小型演示应用程序。
现在,我想展示一种MessageBoxMVVM方式。
对于对话框,我创建了一个事件,该事件在ShellView(根视图)中处理,并且仅WindowManager.ShowDialog使用Dialogs ViewModel类型进行调用。似乎对我来说坚持MVVM。
但是,显示消息框并获取其结果的方法是什么(好的还是取消的)?
我已经看到了这个问题,但是也没有答案。
艾森伯格先生亲自回答
“ Caliburn具有用于调用自定义消息框的内置服务。”
谁能说出他的意思?我没有在样本中看到它。
我使用gtkmm 3.0.1并且Gtk::MessageDialog在用户单击按钮后创建对象以销毁对话框时没有看到选项.我发现破坏消息对话框的唯一方法是在辅助函数中调用它,但我觉得这有可能被避免.文档中没有提到破坏它的方法,只提到用户需要销毁它.
这是我的代码:
#include <gtkmm.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
Gtk::Main kit(argc, argv);
Gtk::Window client;
Gtk::MessageDialog dialog("Info", false, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO);
dialog.set_secondary_text( "Dialog");
dialog.set_default_response(Gtk::RESPONSE_YES);
dialog.run();
cout << "dialog is still open, needs to be destroyed at this point." << endl;
Gtk::Main::run(client);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud) 有一个线程可以抛出异常,当它被捕获时,会显示某个消息框,然后软件关闭.
但问题是,由于它不是程序的主线程,当我显示消息框时,程序窗口保持空闲,供用户与之交互.与主窗口上方显示消息框不同,它不会锁定屏幕.我想避免这种情况.
我想知道最好的方法是什么.到目前为止,我想过使用某种线程通信(从未在C#中使用它)来从主线程中引出消息框.
提高线程:
Thread thread = new Thread(new ThreadStart(MyClass.MyMethod));
thread.IsBackground = true;
thread.Start();
Run Code Online (Sandbox Code Playgroud)
异常的捕获在各个部分MyMethod.它是一个线程,自程序启动以来一直在循环中运行不间断.异常的原因是网络错误.
这与如何禁用Alt + F4结束表格不重复?.请阅读原因.
我在我的主表单下创建了一个自定义MessageBox.
并将"Aight"按钮单击监听器设置为:
private void Aight_buton_Click(object sender, EventArgs e)
{
dr = DialogResult.OK;
Close();
}
Run Code Online (Sandbox Code Playgroud)
"X"按钮的情况也是如此.按照上面的问题回答我可以做到这一点:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = e.CloseReason == CloseReason.UserClosing;
}
Run Code Online (Sandbox Code Playgroud)
但是因为我Close()在Aight_buton_Click它下面使用它仍然注册为e.CloseReason == CloseReason.UserClosing;.所以按键不会关闭我的表单(自定义消息框)也不会Alt+ F4.我想知道具体如何我只能阻止Alt+ F4关闭而不是Close()关闭.请不要使用,ModifierKeys因为它不是最合适的,也不是处理这种情况的最聪明的方法.
messagebox ×10
c# ×5
wpf ×4
winforms ×2
.net ×1
.net-core ×1
add-in ×1
c++ ×1
formclosing ×1
gtkmm ×1
modal-dialog ×1
mvvm ×1
scroll ×1
textbox ×1