2012-03-09 2 views
0

응용 프로그램에서 실행하지 않고 windows 양식이 있습니다.응용 프로그램없이 양식 양식 처리

이것은 내가 폼 내에서 호출해야하는 핵심 기능입니다 ... 몇 가지 클래스 변수가 있습니다. 정말 중요한 것은 closingpermission뿐입니다. 사용자는 윈도우를 닫기 위해 버튼을 눌러야 만한다.

불행히도 이벤트를 업데이트하고 처리 할 수 ​​없습니다. this.Update(), this.Refresh() 트릭을하지 마십시오.

internal short ask(String question, String RegExFilter, out String answer) 
    { 
     this.RegExFilter = RegExFilter; 
     this.Text = question; 

     this.Show(); 
     while (!closingpermission) 
     { 
      //Window needs to process its events and allow the user to interact. 
     } 
     answer = answerBox.Text; 
     this.Close(); 
     return RetVal; 
    } 

편집 :

"응용 프로그램"싱글 응용 프로그램을 의미한다 - 나는 그것을 가지고 있겠지.

루프가 양식을 계속 표시해야합니다. 나는 soution이 Hans Passant이라고 썼다고 생각합니다. 메시지 루프를 펌프해야합니다.

Ken2K의 솔루션은 나를 위해 작동하지 않습니다.

편집 # 2 : 여기

는 compileable 예이다 - 업데이트 Methos는 내 창을 새로 고쳐하지만 난 텍스트 상자를 편집 할 수 없습니다 - 신경 끄시 버튼이나 내가 텍스트가 다음에 할 것입니다에 대해. 나는 심지어 텍스트를 편집 할 수 없다.

using System.Windows.Forms; 
using System.Drawing; //System.Drawing.dll 

namespace StackOverFlowDemo 
{ 
    class Example 
    { 
     public static void Main() 
     { 
      Input input = new Input(); 
      input.Ask("Something"); 
     } 
    } 

    class Input : Form 
    { 
     TextBox textbox = new TextBox(); 

     public Input() 
     { 
      this.Controls.AddRange(new Control[] { textbox }); 
      this.Bounds = new Rectangle(0, 0, 500, 500); 
      this.textbox.Bounds = new Rectangle(10, 10, 480, 200); 
     } 

     internal void Ask(string question) 
     { 
      this.Text = question; 
      this.Show(); 
      while (true) 
      { 
       this.Update(); 
      } 
     } 
    } 
} 

편집 # 3

난 내가 할 수없는 싶은 생각합니다. 주제에 대해 읽었을 때 항상 protected override void WndProc(ref Message m);을 호출하는 "무언가"가 필요해 보입니다. 그 무언가가 응용 프로그램 인 것 같습니다. 응용 프로그램이없는 응용 프로그램에서이 작업을 수행 할 수있는 방법을 모르고 있습니다. 제발 동의하지 마십시오.

+0

나는 이해할 수 없다.'응용 프로그램 없음'이란 무엇입니까? – Steve

+2

'응용 프로그램'이 없으므로 분명히 작동하지 않습니다. 양식을 유지하려면 Application.Run() 호출이 필요합니다. 메시지 루프가 실행됩니다. 또는 Form.ShowDialog(). –

+0

[이 질문] (http://stackoverflow.com/questions/4721962/c-sharp-application-run-without-form) 및 승인 된 답변을보십시오. – Steve

답변

0

하나를했다 :

있습니다 (사용자에게 값을 묻는 팝업 종종 바람직) 모달 형태와 FormClosingEventArgsCancel 속성을 사용할 수 있습니다 시작.

'응용 프로그램'이 없기 때문에 분명히 작동하지 않습니다. 양식을 유지하려면 Application.Run() 호출이 필요하며 메시지 루프는 입니다. 또는 Form.ShowDialog(). - 12시 34분

당신은 또한 응용 프로그램을 사용할 필요가 Froms 사용하려는 경우에 3월 9일 한스 옆모습 - 당신이 그나마 내가 예를 들어 XNA 같은 시각화를 위해 다른 프레임 워크로 전환 당신이 응용 프로그램을 사용하려면 .

앱에 싱글 톤이 있다는 것을 받아들이고 응용 프로그램을 사용하십시오.

0

간단한 해결책은 Application.DoEvents();을 사용하는 것이지만 나는 당신의 제목에 약간 혼란 스럽습니다.

+1

'Application.DoEvents()'는 일반적으로 ** 문제는 숨기고 * 해결할 수는없는 더러운 해결책입니다. 'DoEvents()'를 가능한 한 피하십시오. 이것은 흔히 사악한 버그의 원인입니다. – ken2k

+0

나는 Application.DoEvents()를 가졌다. 거기에 다른 환경에서 -하지만 더 이상 그 글로벌 "응용 프로그램"을 가지고, 그래서 그것에 대해 아무것도 호출 할 수 없습니다. – Johannes

1

내가 아는 바로는 사용자가 Form을 팝업하여 텍스트를 입력하도록 요청하는 것입니다. 무한 루프를하지 마십시오. 작동하지 않습니다. UpdateRefresh도 중요하지 않습니다. 에서 rigth 첫 덧글의

public partial class Form2 : Form 
{ 
    private bool preventClose = true; 

    public string ResultString 
    { 
     get 
     { 
      // Returns the content of a textbox 
      return this.textBox1.Text; 
     } 
    } 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // Closes only when button1 is clicked 
     this.preventClose = false; 
     this.Close(); 
    } 

    private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     e.Cancel = this.preventClose; 
    } 
} 


using (Form2 frm = new Form2()) 
{ 
    frm.ShowDialog(); 

    string res = frm.ResultString; 
}