как сделать так, чтобы форма Windows всегда отображалась сверху?

2

Я использую VSTS 2008 + С# +.NET 2.0 для разработки приложения Windows Forms. В стандартном Form1 у меня есть кнопка, и нажмите кнопку, чтобы вызвать другую форму Form2.

Мой вопрос: я хочу, чтобы Form2 всегда был наверху, то есть пользователь должен ответить Form2 (заполнить informateon в Form2 и закрыть его), пока пользователь не сможет продолжать обрабатывать Form1. Как реализовать эту функцию?

Вот мой текущий код.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.Visible = true;
    }
}
Теги:
winforms
visual-studio-2008

5 ответов

16
Лучший ответ

Самый лучший способ сделать то, что вы хотите, - сделать диалоговое окно формы2. Вы делаете это, вызывая его

form2.ShowDialog()

метод.

  • 0
    +1 - Джордж должен использовать модальный диалог, а не верхний.
  • 0
    Спасибо, Алекс, ваше решение работает!
Показать ещё 1 комментарий
8

попробуйте это

this.TopMost = true;
  • 0
    Извините, ваше решение не работает. Я добавил код form2.TopMost = true, но после добавления кода я все еще могу удалить Form2 в сторону и продолжить отвечать на Form1. Есть идеи, что не так?
  • 0
    Лучшим решением для одного приложения (много форм) является метод ShowDialog.
2

Вы можете использовать метод Win32:: SetWindowPos() и установить HWND hWndInsertAfter в HWND_TOPMOST, чтобы он оставался сверху.

Посмотрите на документацию SetWindowPos: http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx

[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int    cx, int cy, uint uFlags);

Вот несколько примеров: http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html

1

Предполагая, что вы хотите, чтобы пользователь не взаимодействовал с Form1, пока они не закончили с Form2, вы хотите ShowDialog() метод,

0

С родным .NET theres нет способа разместить форму сверху и удерживать ее там.

Form.TopMost устанавливает форму сверху только при создании. Form.ShowDialog() устанавливает форму поверх всех форм этого приложения, но затем может быть отброшена назад и за другими приложениями.

Я помню, что мы использовали некоторые P/Invoke-Calls для родного Win32 для обработки этого случая, но не помним, что именно вызывает. В любом случае 100% никогда не были достигнуты, распространены на Win2000 до WinXP, ничего не работало везде.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню