2012-04-11 2 views
-2

J'ai une application WinForms que j'aimerais utiliser en tant qu'application console (avec 2 arguments de ligne de commande).Créer une application WinForms WinForms/Console hybride

J'ai essayé l'approche à partir de cette question Behavior in WinForm/Console Hybrid Application. Mais dans ce cas, les méthodes de FormMain.cs (classe FormMain) ne sont pas accessibles à partir de la classe Program (Program.cs).

Comment modifier le code pour pouvoir exécuter les méthodes FormMain.cs à partir de Program.cs?

UPD

Le Program.cs Code est

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

}

Les FormMain.cs code (j'ai réduit un peu) est

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

Veuillez poster le code. –

+0

Voir ma réponse ici: http://stackoverflow.com/questions/9620436/is-it-possible-to-have-savefiledialog-in-windows-console-applications/9620534#9620534 –

Répondre

2

Vous cherchez peut-être à cette arrière: Au lieu d'espérer d'avoir accès à vos fonctions utiles trouvées dans Form.cs - si elles sont utiles que - vous devriez, à la place, les déplacer vers un emplacement externe où vous pouvez contrôler leur accessibilité plus facilement.

+0

Merci! Cela a résolu mon problème. J'ai déplacé les méthodes couramment utilisées dans une classe séparée en tant que méthodes publiques. Ensuite, ces méthodes peuvent être accessibles à la fois à partir du formulaire et du programme. – andrey1492

Questions connexes