Здравствуйте, 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();
}