0

ログインカスタムダイアログボックスを作成しました

static LoginDialog loginDialog;

public static bool ShowLoginDialog()
        {
            result = false; // Success

            loginDialog = new LoginDialog();

            loginDialog.ShowDialog();
            loginDialog.BringToFront();
            loginDialog.TopMost = true;
            loginDialog.Activate();

            return result;
        }

インタラクションなしで別のフォームから呼び出します。タイマーがチェックされると起動します。

LoginDialog.ShowLoginDialog();

問題は、ログイン画面が現在開いているフォームの上に焦点を合わせていないことです。

どうすればこの問題を解決できますか?ありがとうございました。

4

6 に答える 6

1

フォーカスを受け取りたいフォーム内でSetForegroundWindowを使用します

[DllImport("user32")] 
public static extern int SetForegroundWindow(IntPtr hwnd); 

ダイアログフォームが表示されたら、フォームハンドルを使用して関数を呼び出します。

void OnShown(object sender, EventArgs e) {
   SetForegroundWindow(this.Handle);
} 
于 2012-07-13T07:34:11.077 に答える
1

loginDialog.TopMost = true;前に使用loginDialog.ShowDialog();

なぜ静的メソッドを使用しているのですか?これが主な問題だと思います。

于 2012-07-14T04:29:46.613 に答える
0

あなたLoginDialogはただの別のフォームだと思います。これを試して -

MainForm

private void MainForm_Load(object sender, EventArgs e)
    {
        timer1.Interval = 3000; // your preferred time-interval
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        LoginDialog.ShowLoginDialog(timer1);
    }  

LoginDialog

    private static bool result;
    private static LoginDialog loginDialog;

    public static bool ShowLoginDialog(Timer timer)
    {
        timer.Stop();

        result = false; // Success

        loginDialog = new LoginDialog();
        loginDialog.ShowDialog();

        return result;
    }  

注:result使用している変数がわかりません。

于 2012-07-13T08:12:13.227 に答える
0
//Suppose you have Form1  as your parent Form
//Add Button on it and on its Click Event

単に行う:

public bool ShowLoginDialog()
    {
        bool result = false; // Success

        var  loginDialog = new LoginDialog();
        loginDialog.ShowDialog();

        return result;
    }

ShowDialog()は、実行する親フォームの一番上に常に表示されます。

よろしく

于 2012-07-13T07:28:48.223 に答える
0

loginDialog.BringToFront(); ShowDialog()が実行をブロックするため、呼び出されません。所有者フォームをShowDialogに渡します。

于 2012-07-13T07:45:56.460 に答える
0

ShowLoginDialog()別のフォームからを呼び出していると言います。署名をまたはに変更できますpublic static bool ShowLoginDialog(Form parentForm)public static bool ShowLoginDialog(IWin32WindowOwner parentForm)?もしそうなら、あなたはすることができます:

public static bool ShowLoginDialog(IWin32WindowOwner parentForm)
{
    using(LoginDialog loginDialog = new LoginDialog()) //Really should use using statement
    {
        loginDialog.ShowDialog(parentForm); //Set the parent form for the dialog
    }
}
于 2012-07-14T04:34:53.973 に答える