2012-03-08 5 views
3
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Diagnostics 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string filename = null; 
      using (SaveFileDialog sFile = new SaveFileDialog()) 
      { 
       sFile.Filter = "Text (Tab delimited)(*.txt)|*.txt|CSV (Comma separated)(*.csv)|*.csv"; 
       if (sFile.ShowDialog() == DialogResult.OK) 
       { 
        filename = sFile.FileName; 
        WriteRegKey(diagnostic, filename); 
       } 

      } 
     } 
    } 
} 
내가 오류를 얻고있다

에서의 SaveFileDialog()하는 것입니다 : 형식 또는 네임 스페이스 이름 '의 SaveFileDialog이'을 (를) 찾을 수 없습니다 을 (당신은 using 지시문 또는 어셈블리 참조가?)이 가능 윈도우 콘솔 응용 프로그램

System.Windows.Forms 네임 스페이스를 추가하려고했지만 시도 할 수 없었습니다.

+0

System.Window.Forms 네임 스페이스를 추가 할 수 없다는 것은 무엇을 의미합니까? 참조에 추가 했습니까? 오류 메시지가 나타 났습니까? –

+0

이 작업을 수행하는 유일한 방법은 Windows Forms을 기반으로하는 파일 조작을위한 별도의 응용 프로그램을 만들어 콘솔 응용 프로그램에서 호출하는 것입니다. – Bridge

+0

물론 할 수 있습니다. 'System.Window.Forms'에'reference'를 추가 할 필요가 있습니다. –

답변

10

System.Windows.Forms 어셈블리에 대한 참조를 추가해야합니다.

또한 응용 프로그램 시작점 방법에 STAThread 특성을 추가해야합니다.

[STAThread] 
private static void Main(string[] args) 
{ 
    using (SaveFileDialog sFile = new SaveFileDialog()) 
    { 
     sFile.ShowDialog(); 
    } 

    Console.ReadKey(); 
} 

하지만 솔직히는, 그건 끔찍한 생각입니다. 콘솔 응용 프로그램에는 콘솔 자체의 다른 UI가 없어야합니다. SaveFileDialog의 네임 스페이스에서 알 수 있듯이 Forms에만 SaveFileDialog을 사용해야합니다.

+0

적어도 한 번은이 작업을 수행해야했지만 일반적으로 좋은 아이디어는 아닙니다. 필자는 사용자가 콘솔 앱을 어떻게 사용하는지 이해하지 못하기 때문에 전달할 인수와 사용 방법을 사용자에게 알리는 대화 상자를 보여줄 수 있기를 원했습니다. 그러나 프로그램을 명령 줄에서 호출하여 자신의 창을 만들지 않고도 다른 프로그램 (특히 PowerPoint)과 통합 할 수 있다는 것이 중요했습니다. –

+0

고마워요 :) – Nisha

+0

그건 나쁘지 않은 생각입니다. 파일과 관련된 작업을 수행하고 친구에게 제공하는 빠른 프로그램을 작성하려고하지만 전체 UI를 작성하지 않으려면 콘솔 애플리케이션에서 파일 선택기를 여는 것이 가장 쉬운 방법입니다. – dtanders

11

문제를 되돌리고 콘솔이있는 Windows Forms 응용 프로그램을 사용하면 더 쉽게 찾을 수 있습니다. 이렇게하려면 Visual Studio에서 Windows Forms 응용 프로그램을 만듭니다. 작성한 기본 양식을 삭제하십시오. program.cs를 열고 창을 만들고 콘솔 앱 코드로 바꾸려는 코드를 제거하십시오.

이제 트릭은 콘솔을 수동으로 만들어야한다는 것입니다. 당신이 헬퍼 클래스와 함께 할 수 있습니다 : 프로그램의 시작 부분에서 지금

public class ConsoleHelper 
{ 
    /// <summary> 
    /// Allocates a new console for current process. 
    /// </summary> 
    [DllImport("kernel32.dll")] 
    public static extern Boolean AllocConsole(); 

    /// <summary> 
    /// Frees the console. 
    /// </summary> 
    [DllImport("kernel32.dll")] 
    public static extern Boolean FreeConsole(); 
} 

ConsoleHelper.AllocConsole(); 

전화 (당신이 시도하고 Console.Writeline의 전) 그리고 당신의 프로그램 호출

의 맨 끝에
ConsoleHelper.FreeConsole(); 

이제 SaveFileDialog를 포함하여 WinForms 대화 상자를 만들 수있는 콘솔 앱이 있습니다.

1

System.Windows.Forms에 대한 참조를 원본 파일이 아닌 프로젝트 자체에 추가해야합니다. 솔루션 탐색기 도구 상자에서 프로젝트 아이콘을 마우스 오른쪽 단추로 클릭하고 "참조 추가"를 선택하십시오.

1

네임 스페이스 System.Windows.Forms를 코드에 가져 오지 않았습니다. 당신은 필요

에서 System.Windows.Forms를 참조를 추가 대화 상자 '참조 추가'. 그런 다음 'System.Windows.Forms' (따옴표 제외)을 사용하여 SaveFileDialog 클래스의 개체를 만듭니다.