Folks,
请问有人知道如何从其他不可见的应用程序中显示表格吗?and它是否获得焦点(即出现在其他窗口的顶部)?我正在使用 C# .NET 3.5。
我怀疑我采取了“完全错误的方法”......我确实not 应用程序.运行(新的TheForm())相反我(new TheForm()).ShowModal()...表单基本上是一个模式对话框,带有一些复选框;文本框以及“确定”和“取消”按钮。用户勾选一个复选框并输入描述(或其他内容),然后按“确定”,表单消失,进程从表单中读取用户输入,处理它,然后继续处理。
这是有效的,除非当显示表单时它不会获得焦点,而是出现在“主机”应用程序后面,直到您在任务栏(或其他位置)中单击它。这是一个最烦人的行为,我预测这会导致许多“支持电话”,而现有的 VB6 版本没有这个问题,所以我在可用性方面倒退了......用户不会接受这一点(并且他们也不应该)。
所以......我开始认为我需要重新考虑整个shebang......我应该在前面显示表单,作为“正常应用程序”,并将处理的其余部分附加到“确定”按钮单击事件。它应该有效,但这需要我没有的时间(我已经超出了时间/预算)......所以首先我真的需要尝试使当前的方法发挥作用......即使通过快速和 -肮脏的方法。
那么,有人知道如何“强制”.NET 3.5 表单(通过公平手段或家禽)来获得焦点吗?我在想“神奇的”Windows API 调用(我知道
模糊地带:这似乎只是工作中的一个问题,我们在 Windows XP SP3 上使用 Visual Studio 2008...我刚刚在家里的 Visual C# 2008 上使用 SSCCE(见下文)未能重现该问题Vista Ulimate...这很好用。啊?搞什么?
另外,我发誓昨天在工作中运行 EXE 时显示了该表单,但直接从 IDE 中按 F5(或 Ctrl-F5)时则没有(我刚刚忍受了)......在家里无论哪种方式,表格都显示良好。完全令人困惑!
它可能相关,也可能不相关,但今天早上,当项目在调试模式下运行并“动态”编辑代码时,Visual Studio 崩溃了……它陷入了我认为是无限循环错误的状态消息。错误消息是关于“无法调试这个项目,因为它不是当前项目,或者其他什么......所以我只是用进程资源管理器杀死了它。它再次正常启动,甚至提出恢复“丢失的项目” “文件,我接受了这个提议。
using System;
using System.Windows.Forms;
namespace ShowFormOnTop {
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
Form1 frm = new Form1();
frm.ShowDialog();
}
}
}
背景:我正在将现有的 VB6 实现移植到 .NET...它是一个名为“客户端”GIS 应用程序的“插件”MapInfo http://www.mapinfo.com/。现有的客户端“在无形中工作”,我的指示是“使新版本尽可能接近旧版本”,效果足够好(经过多年的修补);它只是用不受支持的语言编写的,因此我们需要移植它。
关于我:我对 C# 和 .NET 基本上是个菜鸟,虽然我有擦底证书,但我已经成为一名专业程序员 10 年了;所以我有点“知道一些东西”。
任何见解都将受到欢迎……感谢大家花时间阅读本文。意识(显然)不是我的强项。
干杯。基思.