C # - Можно ли начать мой проект с класса вместо формы? - PullRequest
1 голос
/ 15 мая 2010

Я хочу, чтобы мой проект запускался через класс, а не через форму, есть ли способ сделать это?Или, если быть более точным, есть ли хороший способ убедиться, что первый класс, кроме Program, который запускается, не является классом формы.

Я пытался перейти на свой класс в Program.main () но похоже, что Application.run () нужен ApplicationContext.
Полагаю, я мог бы изменить класс Program для запуска другого класса и позволить этому классу запускать форму с Application.run (), но я думаю, что этовызывает много проблем, так как я не хочу, чтобы одна и та же форма запускалась первой каждый раз, а Application.run () нужно использовать как минимум один раз и максимум один раз.Поэтому я думаю, что будет трудно отследить, использовался ли Application.run () или нет.

Еще один вопрос, который может быть даже более важным;Это хороший способ сделать что-то в .net?Причина, по которой я хочу это сделать, заключается в том, что я хочу создать какой-то проект MVC, в котором класс, с которого я хочу начать, - это контроллер, и все формы, которые я буду использовать, будут представлениями.

Ответы [ 2 ]

1 голос
/ 15 мая 2010

Пример реализации контроллера:

public class Controller : ApplicationContext {
    public Controller() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        mInstance = this;
    }
    public Controller Instance { get { return mInstance; } }
    public void Start() {
        Application.Run(this);
    }
    public void Exit() {
        this.ExitThread();
    }
    public void CreateView(Form frm) {
        Views.Add(frm);
        frm.FormClosed += FormClosed;
        frm.Show();
    }
    private void FormClosed(object sender, FormClosedEventArgs e) {
        Views.Remove(sender as Form);
        // NOTE: terminate program when last view closed
        if (Views.Count == 0) Exit();
    }
    private List<Form> Views = new List<Form>();
    private Controller mInstance;

}

Вы можете использовать это так:

static class Program {
    [STAThread]
    static void Main() {
        var c = new Controller();
        c.CreateView(new Form1());
        c.Start();
    }
}

Также проверьте класс WindowsFormsApplicationBase как хороший базовый класс для вашего контроллера. Приятная поддержка одноэлементных приложений и заставок.

1 голос
/ 15 мая 2010

Чтобы решить, какой класс должен запускаться первым, вы должны просто добавить метод Main вашего приложения в этот класс.

Итак, создайте новый класс, вставьте в метод Main (и удалите его из Program.cs) необходимую логику, а затем запустите окно следующим образом:

    [STAThread]
    static void FormLauncher()
    {
        Application.EnableVisualStyles();
        Application.Run(new Form1());
    }

Form1 - это имя формы, которая должна быть запущена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...