皆さん、
他の方法では見えないアプリケーションからフォームを表示し、フォーカスを取得する (つまり、他のウィンドウの上に表示する) 方法を知っている人はいますか? 私は C# .NET 3.5 で作業しています。
「完全に間違ったアプローチ」をとったのではない かと思います... Application.Run(new TheForm ())代わりに I (new TheForm()).ShowModal() ... フォームは基本的にモーダル ダイアログです。いくつかのチェックボックスがあります。テキスト ボックス、OK ボタンとキャンセル ボタン。ユーザーがチェックボックスにチェックを入れ、説明 (または何でも) を入力してから [OK] を押すと、フォームが消え、プロセスがフォームからユーザー入力を読み取り、それを破棄して、処理を続行します。
これは機能しますが、フォームが表示されている場合を除き、フォーカスが得られず、タスクバー (またはその他) でクリックするまで、「ホスト」アプリケーションの背後に表示されます。これは最も厄介な動作であり、多くの「サポート コール」が発生すると予測されます。また、既存の VB6 バージョンにはこの問題がないため、使いやすさを後退させます...そしてユーザーはそれを受け入れません (そしてまた、そうすべきではありません)。
だから...私はシバン全体を再考する必要があると考え始めています...フォームを「通常のアプリケーション」として前もって表示し、残りの処理をOKボタンクリックイベントに添付する必要があります。それはうまくいくはずですが、それには私が持っていない時間がかかります(私はすでに時間/予算を超えています)...だから最初に、現在のアプローチをうまく機能させる必要があります...迅速かつ-汚い方法。
それで、.NET 3.5フォームを(公正な手段または家禽によって)「強制」してフォーカスを得る方法を知っている人はいますか?私は「魔法の」Windows API呼び出しを考えています(私は知っています
トワイライト ゾーン:これは職場の問題のようです。私は Windows XP SP3 で Visual Studio 2008 を使用しています...自宅の Visual で SSCCE (以下を参照) で問題を再現できませんでした。 Vista Ulimate 上の C# 2008... これは正常に動作します。は?なんてこと?
また、昨日職場で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 に移植しています... これは、MapInfoと呼ばれる「クライアント」GIS アプリケーションの「プラグイン」です。既存のクライアントは「目に見えないほど機能した」ので、私の指示は「新しいバージョンを古いバージョンにできるだけ近づけるように」です。サポートされていない言語で書かれているだけなので、移植する必要があります。
私について:私は一般的に C# と .NET にはほとんど慣れていませんが、ボトムワイプ証明書を持っていますが、プロのプログラマーとして 10 年間働いています。だから、私は「何かを知っている」のです。
どんな洞察も大歓迎です...そして、ここまで読んでくれてありがとう。誠実さは (明らかに) 私の得意分野ではありません。
乾杯。キース。