Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Восстановление формы, сделать форму активной 
:(
    Опции темы
PashaSem
Дата 14.2.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 5.3.2006

Репутация: нет
Всего: нет



Всем Привет!
Подскажите как форму сделать активной.
Тоесть форма уже открыта но свернута  и по клику  кнопки на другой форме она должна развернуться (восстановиться).


Спасибо!  
PM MAIL   Вверх
HellMasterHaiL
Дата 14.2.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 9.8.2006
Где: Россия, МО, г. Юб илейный

Репутация: нет
Всего: 1



метод Show

Код

Me.Hide () 'сворачивание формы
Me.Show () 'восстановление формы


таким образом можно управлять любой формой проекта (сворачивать и разворачивать)

А вообще на форуме есть поиск, еще хорошие люди придумали MSDN, поковырялся бы сначала там, там точно есть примеры работы с Windows-формами!


Это сообщение отредактировал(а) HellMasterHaiL - 14.2.2007, 11:33
PM MAIL ICQ   Вверх
PashaSem
Дата 14.2.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 5.3.2006

Репутация: нет
Всего: нет



К сожаление данный код работает если окно еще не открыто.
Но если оно уже открыто мне нужно чтоб переклчиться  как клавиши Alt+Tab но на frm2

Код


          job frm2;

        private void button16_Click(object sender, EventArgs e)
        {
            if (frm2 == null || frm2.IsDisposed)
            {
                frm2 = new job();
                frm2.Show();
          
            }
         
        }

PM MAIL   Вверх
HellMasterHaiL
Дата 14.2.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 9.8.2006
Где: Россия, МО, г. Юб илейный

Репутация: нет
Всего: 1



тогда метод Activate()
PM MAIL ICQ   Вверх
PashaSem
Дата 14.2.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 5.3.2006

Репутация: нет
Всего: нет



Метод Activate() применим когда мы вызываем новую форму тоесть создаем экземпляр.
А как быть если форма уже открыта .
Например Form1 уже существует и она не вызывалась из Form2
Как сделать чтоб по клику мышки на кнопке на Form2 форма (Form1 )стала активной!
PM MAIL   Вверх
-Mikle-
Дата 14.2.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Цитата

frm2.Show();

если правильно тебя понял, то вынеси эту строчку за пределы услови if


Цитата(PashaSem @  14.2.2007,  18:40 Найти цитируемый пост)
Например Form1 уже существует и она не вызывалась из Form2

Ты имеешь ввиду что ссылки на Form1 в Form2 нету? То есть Form1 вызвалась из другого места (не из Form2)?
Если да, то учточни еще:
1. Может ли форма Form1 иметь несколько экземпляров для всего твоего приложения?
2. Нужно ли в Form2 работать с экземпляром активированной Form1? (То есть иметь ссылку на нее)

После уточнения, следующим постом будет пример smile

Добавлено @ 16:14 
 smile 
И еще какой вариант примера тебе удобнее: Который должен встраивается в код формы или который существует независимо для всех форм (без дописывания кода в класс формы)?
 smile 


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaSem
Дата 14.2.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 5.3.2006

Репутация: нет
Всего: нет



Есть проект при запуске вызываеться Form1
из Form1 вызываеться форма job и только один экземпляр при необходимости она разварачиваеться    frm2.Activate();
Код

 job frm2;

        private void button16_Click(object sender, EventArgs e)
        {
            if (frm2 == null || frm2.IsDisposed)
            {
                frm2 = new job();
                frm2.Show();
          
            }
            frm2.Activate();
        }

Form1 может загрузиться один раз при запуске ( 1 экземпляр)
В принципе работать с  ней не  нужно если я понял пересылать данные на Form1 я не собираюсь просто нужно сделать ее активной.(развернуть)
из формы job по клику кнопки
Я не могу написать frm3 = new Form1();.... так как экземпляр Form1 уже существует и должен оставаться только один.

PM MAIL   Вверх
-Mikle-
Дата 14.2.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Вариант встраиваемый в форму JOB

Код

public JOB : Form
{
        private static JOB _instance;
        public static void ShowForm()
        {
            if (_instance == null)
                _instance = new JOB();

            if (_instance.Visible == false)
                _instance.Show();

            if (_instance.WindowState == FormWindowState.Minimized)
                _instance.WindowState = FormWindowState.Normal;

            _instance.Activate();
        }
}


Здесь я предполагал, что форма JOB никогда не бывает Maximaized, и может имееть только два других состояния (Minimized и Normal).

Добавлено @ 21:01 
Забыл про исполбзование:

Код

    // всегда покажет на переднем плане один экземпляр формы JOB
    JOB.ShowForm();



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaSem
Дата 16.2.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 5.3.2006

Репутация: нет
Всего: нет



Я чего то не понял!
Мне нужно сделать активной форму Form1 которая открываеться при запуске проекта и остаеться открытой.
А сделать ее нужно активной из формы job которая открываеться по клику из формы Form1.
PM MAIL   Вверх
-Mikle-
Дата 19.2.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Ну разницы нет. Идея остается такой же. Сейчас я в командировке, и потому нет времени расписывть новый код. Когда вернусь, могу написать, если не разберещься до этого времени.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
MrDale
Дата 19.10.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 15.10.2006
Где: Ульяновск

Репутация: нет
Всего: нет



Цитата(-Mikle- @ 14.2.2007,  20:59)
Здесь я предполагал, что форма JOB никогда не бывает Maximaized, и может имееть только два других состояния (Minimized и Normal).

Возник похожий вопрос, но у меня форма как раз может быть Maximaised. Как поступить в данном случае?
PM MAIL WWW ICQ Skype Jabber   Вверх
KelTron
Дата 19.10.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 5
Всего: 38



Перед сворачиванием запоминаешь текущее состояние, потом при разворачивании устанавливаешь его же...


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
MrDale
Дата 20.10.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 15.10.2006
Где: Ульяновск

Репутация: нет
Всего: нет



Цитата(KelTron @ 19.10.2009,  18:44)
Перед сворачиванием запоминаешь текущее состояние, потом при разворачивании устанавливаешь его же...

Можно, но неудобно, да и возможно будет изобретением велосипеда, ведь когда мы просто кликаем мышкой на свернутой форме в панели задач она успешно восстанавливает свое предыдущее состояние, значит где-то она его уже запоминает.
PM MAIL WWW ICQ Skype Jabber   Вверх
MrDale
Дата 23.10.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 15.10.2006
Где: Ульяновск

Репутация: нет
Всего: нет



Решил проблему так:
Код

public partial class Form1 : Form
{
        int SW_RESTORE = 9;
        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        public void Show()
        {
            if (WindowState == FormWindowState.Minimized)
            ShowWindow(this.Handle, SW_RESTORE);
        }
}

Нашел ответ здесь

Если же нужно просто узнать состояние окна до минимизации:
Код

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);

        private const int WPF_RESTORETOMAXIMIZED = 2;

        [StructLayout(LayoutKind.Sequential)]
        public struct WINDOWPLACEMENT
        {
            public int length;
            public int flags;
            public int showCmd;
            public System.Drawing.Point ptMinPosition;
            public System.Drawing.Point ptMaxPosition;
            public System.Drawing.Rectangle rcNormalPosition;

            public static WINDOWPLACEMENT Default
            {
                get
                {
                    WINDOWPLACEMENT result = new WINDOWPLACEMENT();
                    result.length = Marshal.SizeOf(result);
                    return result;
                }
            }
        }

        public FormWindowState GetRestoredState(Form form)
        {
            if (form.WindowState == FormWindowState.Minimized)
            {
                WINDOWPLACEMENT pl = WINDOWPLACEMENT.Default;
                GetWindowPlacement(form.Handle, ref pl);

                return pl.flags == WPF_RESTORETOMAXIMIZED ? FormWindowState.Maximized
                    : FormWindowState.Normal;
            }
            else return FormWindowState.Normal;
        }


Это сообщение отредактировал(а) MrDale - 26.10.2009, 09:51
PM MAIL WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.