Если вы используете представления на основе классов, вы можете добавить атрибут name
в свой класс представления, а затем получить к нему доступ в своем шаблоне.
class MyView(TemplateView):
name = 'my_view'
Вы можете получить к нему доступ в своем шаблоне с помощью {{ view.name }}
.
Отлично! Та ссылка указала на меня в правильном направлении. Это, кажется, работает:
Form f = new Form1();
f.FormBorderStyle = FormBorderStyle.FixedToolWindow;
f.ShowInTaskbar = false;
f.StartPosition = FormStartPosition.Manual;
f.Location = new System.Drawing.Point(-2000, -2000);
f.Size = new System.Drawing.Size(1, 1);
Application.Run(f);
Чтобы помешать ему обнаруживаться в Alt-Tab, Вам нужен он, чтобы быть окном инструментов. К сожалению, это препятствует тому, чтобы он запустился минимизированный. Но установка положения запуска к Руководству и расположению его вне экрана добивается цели!
Лучший способ состоит в том, чтобы использовать следующие 1-2 строки в constuctor:
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false; // This is optional
Можно даже установить свойство Minimized в Окне свойств VS.
Можно создать класс, который наследовался System.Windows.Forms.NativeWindow
(который обеспечивает основную возможность цикла сообщения), и сошлитесь Handle
свойство в его конструкторе, чтобы создать его дескриптор и сцепить его в цикл сообщения. После того как Вы звоните Application.Run
, Вы сможете обработать сообщения от него.
public partial class Form1 : Form
{
private bool _isApplicationRun;
public Form1(bool applicationRun)
{
InitializeComponent();
_isApplicationRun = applicationRun;
}
protected override void SetVisibleCore(bool value)
{
if (_isApplicationRun)
{
_isApplicationRun = false;
base.SetVisibleCore(false);
return;
}
base.SetVisibleCore(value);
}
}
static class Program
{
[STAThread]
static void Main()
{
Application.Run(new Form1(true));
}
}
в файле кода Form1 добавляют это. Видимый = ложь; конструктору.
Это скроет окно, но оно высветится в течение секунды, прежде чем оно будет скрыто. Кроме того, можно записать собственное Приложение. Команда выполнения.
для большего количества информации http://social.msdn.microsoft.com/forums/en-US/winforms/thread/dece45c8-9076-497e-9414-8cd9b34f572f/
также можно хотеть установить это. ShowInTaskbar ко лжи.
Почему Вы не можете только передать форму, когда Вы звоните Application.Run
? Учитывая, что это - ясно блокирующийся вызов, на том, какое событие Вы хотите показать форме? Просто вызов form.Show()
должен быть достаточно.
Необходимо посмотреть на создание 'сервиса', поскольку это - приложение без формы. См. http://support.microsoft.com/kb/816169
Я решил проблему следующим образом:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Main main = new Main();
Application.Run();
//Application.Run(new Main());
}
Этот код находится в файле Program.cs, и вы можете увидеть комментарий к исходному вызову метода Application.Run из. Я просто создаю объект класса Main (мой основной класс формы называется Main) и запускаю цикл сообщений приложения без каких-либо параметров. Это запускает приложение, инициализирует любые компоненты формы, но не отображает форму.
Примечание: у вас должен быть какой-то способ отображения вашего окна (например, значок на панели задач, горячая клавиша, таймер или что-нибудь еще, что вам может понравиться).
Используя ответ Ками в качестве вдохновения, я создал более полную концепцию. Если вы используете это решение, никогда не показывайте скрытое окно. Если вы это сделаете, пользователь может закрыть его, и тогда вы потеряете возможность упорядоченного управления выходом из приложения. Этот подход можно использовать для управления Timer, NotifyIcon или любым другим компонентом, который счастлив жить в невидимой форме.
using System;
using System.Windows.Forms;
namespace SimpleHiddenWinform
{
internal class HiddenForm : Form
{
private Timer _timer;
private ApplicationContext _ctx;
public HiddenForm(ApplicationContext ctx)
{
_ctx = ctx;
_timer = new Timer()
{
Interval = 5000, //5 second delay
Enabled = true
};
_timer.Tick += new EventHandler(_timer_Tick);
}
void _timer_Tick(object sender, EventArgs e)
{
//tell the main message loop to quit
_ctx.ExitThread();
}
}
static class Program
{
[STAThread]
static void Main()
{
var ctx = new ApplicationContext();
var frmHidden = new HiddenForm(ctx);
//pass the application context, not the form
Application.Run(ctx);
}
}
}