-2

コンソール アプリケーションとしても実行できるようにしたい WinForms アプリケーションがあります (2 つのコマンド ライン引数を使用)。

この質問Behavior in WinForm/Console Hybrid Applicationからのアプローチを試しました。ただし、この場合、FormMain.cs (FormMain クラス) のメソッドは Program クラス (Program.cs) からアクセスできません。

Program.cs から FormMain.cs メソッドを実行できるようにするには、コードをどのように変更すればよいですか?

UPD

Program.csコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Feature
{

internal static class NativeMethods
{
    [DllImport("kernel32.dll")]
    internal static extern Boolean AllocConsole();
}

static class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        if (args.Length == 0)
        {
            // run as windows app
            Application.EnableVisualStyles();
            Application.Run(new FormMain(args));
        }
        else
        {
            // run as console app
            NativeMethods.AllocConsole();
            //??? How to access the methods of FormMain here ???
        }
    }
}

}

FormMain.csコード(私はそれを少し減らしました)は

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using System.Xml.XPath;
using System.Xml;
using Microsoft.Office.Interop.Excel;
using System.Reflection;

namespace Feature
{
public partial class FormMain : Form
{
    public FormMain(string[] Args)
    {
        InitializeComponent();
    }

    public ArrayList Errors = new ArrayList();

    public ArrayList GetDirectoriesRecursively(string startPath)
    {
        string[] oNewDirectories = Directory.GetDirectories(startPath);
        ArrayList oDirectories = new ArrayList();
        ArrayList oDirectoriesNewList;

        foreach (string oCurrent in oNewDirectories)
        {
            oDirectories.Add(oCurrent);
            oDirectoriesNewList = GetDirectoriesRecursively(oCurrent);
            if (oDirectoriesNewList.Count > 0) oDirectories.AddRange(oDirectoriesNewList);
        }
        return oDirectories;
    }

    public ArrayList GetFilesInFolder(string startPath, string pattern)
    {
        string[] oNewFiles = Directory.GetFiles(startPath, pattern);
        ArrayList oFiles = new ArrayList();
        foreach (string oCurrent in oNewFiles)
            oFiles.Add(oCurrent);
        return oFiles;
    }
}

}

4

1 に答える 1

2

あなたはこれを後ろ向きに見ているかもしれません: Form.cs にある便利な関数にアクセスすることを期待する代わりに (それらがそれほど有用である場合)、代わりに、アクセシビリティをより簡単に制御できる外部の場所にそれらを移動する必要があります。 .

于 2012-04-11T14:55:44.793 に答える