Здравствуйте, Alexander, Вы писали:
A>Привет! A>Мне надо спрятать форму из её конструктора, Hide() и Visible = false не работает .. Есть идеи?
A>Заранее спасибо, A>Alexander.
Помоему формулировка "Мне надо спрятать форму из её конструктора" полная чушь.
Возможно необходимо скрыть проявления формы (заголовок, кнопки)?
2MozgC: Проблема в том, что Show(), на сколько я понимаю, вызывается внутри Application.Run(...); сам я этот метод не вызываю:
...
Application.Run(new MainForm);
...
2G0ga: Да, согласен, формулировка неправильная. Смысл в том, что надо запустить приложение "спрятанным". Кнопка в панели задач не отображается (для отображения и прятанья окна используется иконка в систрее).
Здравствуйте, Alexander, Вы писали:
A>2MozgC: Проблема в том, что Show(), на сколько я понимаю, вызывается внутри Application.Run(...); сам я этот метод не вызываю: A>
A>...
A> Application.Run(new MainForm);
A>...
A>
A>2G0ga: Да, согласен, формулировка неправильная. Смысл в том, что надо запустить приложение "спрятанным". Кнопка в панели задач не отображается (для отображения и прятанья окна используется иконка в систрее).
Так естественно Application.Run(new MainForm); и выполняет — Form.Show()? а про систрей ищи на форуме. Тут про это много написано.
G>Так естественно Application.Run(new MainForm); и выполняет — Form.Show()? а про систрей ищи на форуме. Тут про это много написано.
Про систрей мне искать не надо — все работает. Я спрашивал только как окно не показывать. Есть ли способ сделать так, чтоб Application.Run() не вызывал Show()? Может флаг где-нить установить какой-то, чтоб окно по умочанию не visible было.. меня интересует любой человеческий способ это сделать.
Здравствуйте, Alexander, Вы писали:
G>>Так естественно Application.Run(new MainForm); и выполняет — Form.Show()? а про систрей ищи на форуме. Тут про это много написано. A>Про систрей мне искать не надо — все работает. Я спрашивал только как окно не показывать. Есть ли способ сделать так, чтоб Application.Run() не вызывал Show()? Может флаг где-нить установить какой-то, чтоб окно по умочанию не visible было.. меня интересует любой человеческий способ это сделать.
Здравствуйте, Alexander, Вы писали:
G>>Так естественно Application.Run(new MainForm); и выполняет — Form.Show()? а про систрей ищи на форуме. Тут про это много написано. A>Про систрей мне искать не надо — все работает. Я спрашивал только как окно не показывать. Есть ли способ сделать так, чтоб Application.Run() не вызывал Show()? Может флаг где-нить установить какой-то, чтоб окно по умочанию не visible было.. меня интересует любой человеческий способ это сделать.
2Мизантроп: Попробую, думаю должно заработать. Спасибо!
2Cynic: Спасибо.. вариант. Я уже похожим образом уже делал, работает, но форма при успевает мелькнуть.. неэстетрично как-то выходит ... я всё таки теплю надежду найти способ, чтоб форма и не пробовала прорисовываться пока не позволю.
Здравствуйте, 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();
}
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Идея не то, чтобы очень, но...
PD> this.Location = new System.Drawing.Point(2000, 100); // за пределы экрана
На моей машине это в пределах экрана Двухмониторные конфиги рулят!
Здравствуйте, Alexander, Вы писали:
A>Привет! A>Мне надо спрятать форму из её конструктора, Hide() и Visible = false не работает .. Есть идеи?
A>Заранее спасибо, A>Alexander.
public sealed class CustomApplicationContext : ApplicationContext
{
private readonly Form _form;
public CustomApplicationContext()
{
_form = new Form();
//Дальше ка хотим , так и извращаемся.
}
}