2つのコマンドライン引数を使用してコンソールアプリケーションとして実行するWinFormsアプリケーションがあります。WinFormsアプリケーションをWinForms/Consoleハイブリッドにする
私はこの質問からアプローチを試みました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;
}
}
}
コードを投稿してください。 –
私の答えを見る:http://stackoverflow.com/questions/9620436/is-it-possible-to-have-savefiledialog-in-windows-console-applications/9620534#9620534 –