2010-07-07 3 views
5

아래의 매우 간단한 코드를 사용하면 폼에 포커스가있을 때 키보드의 키를 누르면 폼이 완전히 잠 깁니다. F # interactive 내부에서 실행하고 있습니다. 양식을 닫을 수있는 유일한 방법은 F # 대화식의 "세션 재설정"을 클릭하는 것입니다. KeyPress에 이벤트 처리기를 추가하려고 시도했지만 동일한 결과가 나타납니다. 마우스 이벤트 처리기, 메뉴, 콤보 상자 등을 추가 할 때 아무런 문제가 없었습니다.매우 간단한 F # 폼이 키보드 입력에서 잠김

키보드의 키를 누르는 것만 큼 명백한 버그가있을 수 있으므로이 시점에서 버그가 아닐 수 있습니다. 에프#. 어떤 아이디어?

// Add reference to System.Windows.Forms to project 
open System.Windows.Forms 

let a = new Form() 
a.Visible <- true 

Windows XP의 경우 Windows + Visual Studio 2008 (2010 년 4 월)에서 F # 2.0을 사용하고 있습니다.

감사합니다.

답변

3

난 당신이

Application.Run(a) 

에 대한 호출을 필요가 있다고 생각하지만 난 시도하고 지금 확인하기 위해 시간이 없어.

편집 :

됩니다 할 수있는 유용한 것 :는 C# 윈도우 폼 프로젝트를 생성하고 당신을 시작합니다 어떤 코드를 참조하십시오.

open System.Windows.Forms 

let Main() = 
    Application.EnableVisualStyles() 
    Application.SetCompatibleTextRenderingDefault(false) 
    Application.Run(new Form()) 

[<System.STAThread>] 
do 
    Main() 
+1

"단일 스레드에서 두 번째 메시지 루프를 시작하는 것이 올바르지 않습니다. 대신 Form.ShowDialog를 사용하십시오." 그러나 a.ShowDialog가 작동하는 것 같습니다. 감사! – Dave

2

그것이 자신의 관리 때문에 확실히 가, F # 대화에 Application.Run(a)를 호출 할 필요가 없습니다

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 

그래서 물론 당신이 F #으로 동일한 작업을 수행 할 수 있습니다 : 그것은 당신이 있습니다 메시지 루프 (사실, 당신은 그렇게 할 수 없다). (

양식을 작성 및 Visibletrue에 작동합니다 설정 (그리고 내 컴퓨터에서 작업을 수행는!) Unfortunatelly, 난 당신이보고 그 문제의 원인이 무엇인지 잘 모르겠지만, 확실히 예상되는 동작하지 않습니다 그것은 약간의 버그 인 것 같다).

ShowDialog을 사용하면 전화를 걸 때 대화 상자가 닫힐 때까지 F # Interactive에서 추가 명령을 입력 할 수 없으므로 차단하는 것이 좋습니다. 이것은 매우 불행한 일입니다. F # Interactive의 일반적인 사용법은 양식을 작성하고 표시 한 다음 다른 명령을 입력하여 양식을 수정하는 것입니다. 예를 들면 :

> let a = new Form();; 
val a : Form = System.Windows.Forms.Form, Text: 

> a.Visible <- true;; // Displays the form 
val it : unit =() 

> a.Text <- "Hello";; // Changes title of the form 
val it : unit =() 

(. 정말 질문에 대답하지 않았기 때문에, 커뮤니티 위키로 표시)

+0

F # Interactive에서 제대로 작동합니다. 그러나 OP가 컴파일 된 프로젝트를 수행하는 것처럼 들립니다. – Brian

+0

@Brian : 그는 질문에서 F # 대화 형으로이 프로그램을 실행 중이라고 언급했습니다. 예, 정상적으로 작동해야합니다. –

+0

오, 이런, 잘 읽을 필요가있어. :) 예, 비린내가 들립니다. – Brian

0

이 스레드 관련 버그가 몇 년 동안 F #으로되어 우리를 위해 대규모 피타했다있다 우리의 시각화 제품이 Windows Forms를 기반으로 만들어 졌을 때. F # 대화식 세션에서 몇 차례 돌아가서 응답을 얻을 수 있습니다.

내가 줄 수있는 유일한 조언은 대신 WPF를 사용하는 것이지만 F # 대화식에서 안정적으로 작동하도록하는 것은 여전히 ​​까다 롭습니다. 이것은 아마도 F #에서 시각화 라이브러리를위한 가장 유용한 기능 중 하나 일 것입니다.