0

現在、メイン アプリケーションの起動時に別のスレッドで起動されるログイン フォームがあります。ログイン フォームで TopMost プロパティを設定しようとしましたが、それでも機能しません。いくつかの種類のログイン フォームを扱っており、インターフェイスを作成するだけなので、Application.Run メソッドは使用したくありません。以下のコードは簡略化されています。

更新: これは、ログイン ウィンドウが設計された方法です。これを変更することはできません。これは Windows XP では機能しましたが、Windows 7 では機能しません。

private void FormLoad()
{
  ParameterizedThreadStart threadStart = delegate {
                                 BeginLogin(_loginResults);
                                 };
  var thread = new Thread(threadStart);
  thread.Start();
}

private void BeginLogin(LoginResults callback)
{
  LoginData loginData = GetLoginData();

  if (callback != null)
    callback(loginData);
}

private LoginData GetLoginData()
{
  ILoginForm loginForm = LoginFormCreate();
  loginForm.TopMostDialog = true;  // This property sets the TopMost property.

  return loginForm.ShowLoginDialog();
}
4

2 に答える 2

2

スレッドの使用が問題の原因です。ログイン ウィンドウはメイン ウィンドウから完全に分離されており、ShowDialog() によって無効にされることはありません。また、メイン スレッドはモータリングを継続するため、ユーザーはログイン ウィンドウを横に移動してメイン ウィンドウを使用するだけです。

スレッドを使用しないで、ShowDialog() を直接呼び出してください。

于 2011-03-25T00:34:39.460 に答える
1

Pinvoke を使用する必要があります。ShowWindowでそれを行うことができます。

また、SetWindowLongでも実行できます。

乾杯。

于 2011-03-25T09:40:54.457 に答える