2010-07-07 16 views
5

अति सरल नीचे कोड का उपयोग पर ताले, जैसे ही मैं अपने कीबोर्ड पर कुंजी प्रेस के रूप में, जबकि फार्म ध्यान में है, प्रपत्र पूरी तरह अवरोधित करता है। मैं इसे एफ # इंटरैक्टिव के अंदर चला रहा हूं। फॉर्म को बंद करने का एकमात्र तरीका एफ # इंटरैक्टिव में "रीसेट सत्र" पर क्लिक करके है। मैंने ईवेंट परिणामों को कुंजीपटल में एक ही परिणाम के साथ जोड़ने का प्रयास किया है। मुझे माउस इवेंट हैंडलर, मेनू, कॉम्बो बक्से इत्यादि जोड़ने में कोई समस्या नहीं हैबहुत ही सरल एफ # प्रपत्र कीबोर्ड इनपुट

मुझे कुछ गलत करना होगा, जैसा कि कीबोर्ड पर एक कुंजी दबाकर स्पष्ट है, शायद इस बिंदु पर एक बग नहीं होना चाहिए एफ #। कोई विचार?

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

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

मैं विंडोज एक्सपी पर विंडोज + विजुअल स्टूडियो 2008 (अप्रैल 2010 रिलीज) के लिए एफ # 2.0 का उपयोग कर रहा हूं।

धन्यवाद!

उत्तर

3

मैं तुम्हें

Application.Run(a) 

के लिए एक कॉल की जरूरत है लगता है, लेकिन मैं कोशिश करते हैं और अभी सत्यापित करने के लिए समय नहीं है।

संपादित करें:

करने के लिए है एक उपयोगी बात: एक सी # विंडोज फार्म परियोजना बनाने, और देखते हैं कि कोड यह आप के साथ शुरू होता है। यह आप इस देता है:

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

तो बेशक आप एफ # में एक ही कर सकते हैं:

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

आप निश्चित रूप से एफ # इंटरएक्टिव में Application.Run(a) कॉल करने के लिए है, क्योंकि यह प्रबंधन करता है यह स्वयं की जरूरत नहीं है संदेश पाश (वास्तव में, आप ऐसा नहीं कर सकते हैं)।

एक रूप बनाना और स्थापित करने Visibletrue लिए काम करना चाहिए (और यह मेरे मशीन पर काम करता है!) Unfortunatelly, मुझे यकीन है कि क्या आपके द्वारा रिपोर्ट की समस्या का कारण बन सकता नहीं हूँ, लेकिन यह निश्चित रूप अपेक्षित व्यवहार नहीं है (यह कुछ बग लगता है)।

ShowDialog का उपयोग करना एक अच्छा विचार नहीं है, क्योंकि जब आप इसे कॉल करते हैं, तो यह आपको बंद होने तक F # इंटरएक्टिव में और कमांड दर्ज करने से रोकता है। यह बहुत ही दुर्भाग्यपूर्ण है - एफ # इंटरएक्टिव की विशिष्ट उपयोग एक रूप बना सकते हैं और दिखाने के और फिर अन्य आदेशों में दर्ज करके उसे संशोधित करने के लिए है। उदाहरण के लिए:

> 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

ठीक है, एफ # इंटरएक्टिव में, यह सिर्फ काम करता है। लेकिन ऐसा लगता है जैसे ओपी एक संकलित परियोजना कर रहा है। – Brian

+0

@ ब्रायन: उन्होंने उल्लेख किया कि वह इस प्रश्न में एफ # इंटरैक्टिव में इसे चला रहा है ... हाँ, इसे सिर्फ काम करना चाहिए (और मैंने कभी भी उस व्यवहार का अनुभव नहीं किया है जिसे उसने वर्णित किया है)। –

+0

ओह, ओह, मुझे बेहतर पढ़ने की जरूरत है। :) हाँ, यह फिश लगता है। – Brian

0

यह धागा संबंधी बग कई वर्षों के लिए एफ # में किया गया है और हमारे लिए एक बड़े पैमाने पर PITA था है जब हमारे विज़ुअलाइजेशन उत्पाद विंडोज फॉर्म पर बनाए गए थे। आप अपने एफ # इंटरैक्टिव सत्र में कुछ बार वापसी करके प्रतिक्रिया वापस प्राप्त कर सकते हैं।

केवल सलाह मैं दे सकता है WPF बजाय लेकिन हो रही है कि एफ # इंटरैक्टिव से मज़बूती से काम कर अभी भी काफी मुश्किल है उपयोग करने के लिए है। यह शायद दृश्य पुस्तकालय के लिए हमारे एफ # का सबसे उपयोगी पहलू ...

संबंधित मुद्दे