[C#] Спрятать форму из конструктора
От: Alexander  
Дата: 20.11.09 14:27
Оценка:
Привет!
Мне надо спрятать форму из её конструктора, Hide() и Visible = false не работает .. Есть идеи?

Заранее спасибо,
Alexander.
Re: [C#] Спрятать форму из конструктора
От: MozgC США http://nightcoder.livejournal.com
Дата: 20.11.09 14:30
Оценка:
Не важно, что вы сделаете в конструкторе формы. Так как после создания формы она все равно может быть показана вызовом Show(), к примеру.
Re: [C#] Спрятать форму из конструктора
От: G0ga  
Дата: 20.11.09 14:37
Оценка:
Здравствуйте, Alexander, Вы писали:

A>Привет!

A>Мне надо спрятать форму из её конструктора, Hide() и Visible = false не работает .. Есть идеи?

A>Заранее спасибо,

A>Alexander.

Помоему формулировка "Мне надо спрятать форму из её конструктора" полная чушь.
Возможно необходимо скрыть проявления формы (заголовок, кнопки)?
Re[2]: [C#] Спрятать форму из конструктора
От: Alexander  
Дата: 20.11.09 14:46
Оценка:
2MozgC: Проблема в том, что Show(), на сколько я понимаю, вызывается внутри Application.Run(...); сам я этот метод не вызываю:
...
    Application.Run(new MainForm);
...



2G0ga: Да, согласен, формулировка неправильная. Смысл в том, что надо запустить приложение "спрятанным". Кнопка в панели задач не отображается (для отображения и прятанья окна используется иконка в систрее).
Re[3]: [C#] Спрятать форму из конструктора
От: G0ga  
Дата: 20.11.09 14:52
Оценка:
Здравствуйте, Alexander, Вы писали:

A>2MozgC: Проблема в том, что Show(), на сколько я понимаю, вызывается внутри Application.Run(...); сам я этот метод не вызываю:

A>
A>...
A>    Application.Run(new MainForm);
A>...
A>



A>2G0ga: Да, согласен, формулировка неправильная. Смысл в том, что надо запустить приложение "спрятанным". Кнопка в панели задач не отображается (для отображения и прятанья окна используется иконка в систрее).


Так естественно Application.Run(new MainForm); и выполняет — Form.Show()? а про систрей ищи на форуме. Тут про это много написано.
Re[4]: [C#] Спрятать форму из конструктора
От: Alexander  
Дата: 20.11.09 17:01
Оценка:
G>Так естественно Application.Run(new MainForm); и выполняет — Form.Show()? а про систрей ищи на форуме. Тут про это много написано.
Про систрей мне искать не надо — все работает. Я спрашивал только как окно не показывать. Есть ли способ сделать так, чтоб Application.Run() не вызывал Show()? Может флаг где-нить установить какой-то, чтоб окно по умочанию не visible было.. меня интересует любой человеческий способ это сделать.

Alexander.
Re[5]: [C#] Спрятать форму из конструктора
От: Мизантроп  
Дата: 20.11.09 18:36
Оценка:
Здравствуйте, Alexander, Вы писали:

G>>Так естественно Application.Run(new MainForm); и выполняет — Form.Show()? а про систрей ищи на форуме. Тут про это много написано.

A>Про систрей мне искать не надо — все работает. Я спрашивал только как окно не показывать. Есть ли способ сделать так, чтоб Application.Run() не вызывал Show()? Может флаг где-нить установить какой-то, чтоб окно по умочанию не visible было.. меня интересует любой человеческий способ это сделать.

Посмотрите здесь
Автор: Мизантроп
Дата: 26.09.09
"Нормальные герои всегда идут в обход!"
Re[5]: [C#] Спрятать форму из конструктора
От: Cynic Россия  
Дата: 20.11.09 19:32
Оценка: :))
Здравствуйте, Alexander, Вы писали:

G>>Так естественно Application.Run(new MainForm); и выполняет — Form.Show()? а про систрей ищи на форуме. Тут про это много написано.

A>Про систрей мне искать не надо — все работает. Я спрашивал только как окно не показывать. Есть ли способ сделать так, чтоб Application.Run() не вызывал Show()? Может флаг где-нить установить какой-то, чтоб окно по умочанию не visible было.. меня интересует любой человеческий способ это сделать.

А если так:

        protected override void OnShown(System.EventArgs e)
        {
            base.OnShown(e);
            Hide();
        }
:)
Re[6]: [C#] Спрятать форму из конструктора
От: Alexander  
Дата: 20.11.09 21:05
Оценка:
2Мизантроп: Попробую, думаю должно заработать. Спасибо!

2Cynic: Спасибо.. вариант. Я уже похожим образом уже делал, работает, но форма при успевает мелькнуть.. неэстетрично как-то выходит ... я всё таки теплю надежду найти способ, чтоб форма и не пробовала прорисовываться пока не позволю.
Re[3]: [C#] Спрятать форму из конструктора
От: vdimas Россия  
Дата: 22.11.09 06:01
Оценка: 3 (1)
Здравствуйте, Alexander, Вы писали:

A>2G0ga: Да, согласен, формулировка неправильная. Смысл в том, что надо запустить приложение "спрятанным". Кнопка в панели задач не отображается (для отображения и прятанья окна используется иконка в систрее).


А чем не подходит просто Application.Run()?
Если надо просто физически создать хендл окна, то где-то так:

void main() {
    Control form = new UserControl1();
    form.CreateControl();
    Application.Run();
}


Там есть проблемы создать таким образом хендл окна класса Form, поэтому надо переопределить CreateParams у UserControl, чтобы рамки окна и прочие стили выставить.

Если же надо, чтобы при закрытии главного окна все само выходило, то тут нужен небольшой танец с бубнами. Дело в том, что set_Visible внутри вызывает SetVisibleCore(), который virtual protected. Поэтому где-то так:

    public partial class Form1 : Form
    {
        private bool _myVisible;

        public Form1()
        {
            InitializeComponent();
        }

        protected override void SetVisibleCore(bool value)
        {
            if (value) {
                if (_myVisible)
                    base.SetVisibleCore(true);
                else {
                    MessageBox.Show("I see dead people!");
                    Application.Idle += Application_Idle;
                }
            } else {
                _myVisible = false;
                base.SetVisibleCore(false);
            }
        }

        void Application_Idle(object sender, EventArgs e)
        {
            Application.Idle -= Application_Idle;
            MyVisible = true;
        }

        public bool MyVisible
        {
            get { return Visible; }
            set
            {
                _myVisible = value;
                base.SetVisibleCore(value);
            }
        }
    }


Если же пофиг, создан физически хендл окна или нет, и ты сам в состоянии не забыть где надо вызвать Application.Exit(), то самое правильное так:

        static void Main()
        {
            var frm = new Form();
            frm.Closed += (o, e) => Application.Exit(); 
            frm.Show();  // это можно вызвать и попозже, из трея
            Application.Run();
        }
Re: [C#] Спрятать форму из конструктора
От: Кирилл Осенков Украина
Дата: 23.11.09 02:34
Оценка:
Поставь ей Opacity = 0
Re: [C#] Спрятать форму из конструктора
От: Pavel Dvorkin Россия  
Дата: 23.11.09 06:23
Оценка: :)
Здравствуйте, Alexander, Вы писали:

A>Привет!

A>Мне надо спрятать форму из её конструктора, Hide() и Visible = false не работает .. Есть идеи?

Идея не то, чтобы очень, но...

Ставим форме

this.Location = new System.Drawing.Point(2000, 100); // за пределы экрана
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;

и переопределяем

protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x80; // WS_EX_TOOLWINDOW
cp.ExStyle &= ~0x40000; //
return cp;
}
}
With best regards
Pavel Dvorkin
Re[4]: [C#] Спрятать форму из конструктора
От: Alexander  
Дата: 23.11.09 08:45
Оценка:
Большое спасибо — это то, что надо!

V>А чем не подходит просто Application.Run()?

V>Если надо просто физически создать хендл окна, то где-то так:

V>
V>void main() {
V>    Control form = new UserControl1();
V>    form.CreateControl();
V>    Application.Run();
V>}
V>
Re[2]: [C#] Спрятать форму из конструктора
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 26.11.09 01:26
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Идея не то, чтобы очень, но...


PD> this.Location = new System.Drawing.Point(2000, 100); // за пределы экрана

На моей машине это в пределах экрана Двухмониторные конфиги рулят!
[КУ] оккупировала армия.
Re: [C#] Спрятать форму из конструктора
От: Uzzy Россия  
Дата: 27.11.09 13:23
Оценка:
Здравствуйте, Alexander, Вы писали:

A>Привет!

A>Мне надо спрятать форму из её конструктора, Hide() и Visible = false не работает .. Есть идеи?

A>Заранее спасибо,

A>Alexander.

    public sealed class CustomApplicationContext : ApplicationContext
    {
        private readonly Form _form;

        public CustomApplicationContext()
        {
            _form = new Form();
            //Дальше ка хотим , так и извращаемся.
        }
    }


в Program.cs

Application.Run(new CustomApplicationContext());
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.