Невозможно изменить форму запуска в проекте приложения формы c # windows - PullRequest
2 голосов
/ 15 июля 2011

В проекте Windows-приложения (C #, Visual Studio 2010) я просто хочу перейти на новую форму запуска (оставив старую, уже протестированную, как есть).В program.cs я закомментирую «старую» форму и представляю мой новый «клон»:

static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        //Application.Run(new Form1());         // this working form uses ListBox
        Application.Run(new GridForm());        // want this new form which uses DataGridView
    }

Оба Form1 и GridForm находятся в одном проекте, и оба имеют одинаковые директивы using.(фрагмент следует):

using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
using System.Xml.XPath;
using System.IO;
using System.Reflection;
using CBMI.Common;
using log4net;
using log4net.Config;

namespace CBMI.WinFormsUI
{
    public partial class GridForm : Form
{
    private string defaultRootFolder;
    public static readonly ILog log = LogManager.GetLogger(typeof(GridForm));

    public GridForm()
    {
        InitializeComponent();
    }

Похоже на смехотворно простой вопрос / вопрос, но я в тупике.

EDIT-UPDATE:

Каким-то образом в процессе клонирования / «рефакторинга» я испортил пространство имен в более новой форме, введя изменение регистра.Это было обнаружено при попытке вашего предложения следующим образом:

private void Form1_Load(object sender, EventArgs e)
    {
        CBMI.WinFormsUI.GridForm improvedForm = new CBMI.WinFormsUI.GridForm();
        improvedForm.Show();
        return;

Form1.cs имеет пространство имен, закодированное следующим образом:

namespace CBMI.WinformsUI

GridForm.cs имеет пространство имен, закодированное следующим образом (обратите внимание на CamelCase):

namespace CBMI.WinFormsUI

РЕДАКТИРОВАНИЕ-ОБНОВЛЕНИЕ : Какова лучшая практика для клонирования / рефакторинга новой формы?

Iзабудь как я взломал новую форму.Я думаю, что я начал с «добавить новый элемент» в проект, дал ему новое имя и сохранил.Затем я вручную скопировал некоторый код из оригинала и представил новое представление данных и т. Д. И удалил предыдущие элементы управления пользовательского интерфейса из новой формы.Мне всегда было немного неловко пытаться оставить «версию 1» работающей и ввести новую расширенную вещь, созданную из «старой».Как "профи" делают такие вещи?

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Это правильный способ запуска формы, которую вы хотите. Поэтому должна быть проблема с тем, как Main () относится к вашей новой форме. Как будто он находится в неправильном пространстве имен или что-то в этом роде.

Проверьте это, попытавшись запустить экземпляр формы из существующей формы запуска, используя:

Formname frm1 = new Formname();
frm1.show();
1 голос
/ 15 июля 2011

Я предполагаю, что вы скопировали все файлы для Form1 (их может быть до трех: Form1.cs Form1.Designer.cs and Form1.resx).Тогда вы изменили имя класса в новом *.Designer.csGridForm?

Кроме этой проблемы, не должно быть проблем с вашим кодом в Main.И вы можете проверить это, просто добавив новую форму в проект и ссылаясь на нее, как вы сделали.

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