2012-04-11 9 views
-2

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; 
    } 
} 

}

+3

コードを投稿してください。 –

+0

私の答えを見る:http://stackoverflow.com/questions/9620436/is-it-possible-to-have-savefiledialog-in-windows-console-applications/9620534#9620534 –

答えて

2

あなたはこの後方を見てすることができる。その代わりForm.csで見つけ、あなたの便利な機能へのアクセスを得ることを望んで - あなたは、代わりに、それらを移動する必要があります - 彼らは有益なことをしている場合より簡単にアクセシビリティをコントロールできる外部ロケーションです。

+0

ありがとう!これは私の問題を解決しました。私は一般的に使われているメソッドをpublicメソッドとして別のクラスに移しました。これらのメソッドは、フォームとプログラムの両方からアクセスできます。 – andrey1492

関連する問題