2012-02-10 13 views
5

मुझे एक अजीब समस्या है (शायद केवल समझने के लिए) क्यों एक परीक्षण ऐप में फोकस आयत तब तक नहीं दिखाया जाता जब तक कि मैं टैब कुंजी दबाता हूं।टैब कुंजी दबाए जाने तक फ़ोकस आयताकार क्यों नहीं दिखाया जाता है?

मैं दो रेडियोबॉक्स और दो बटन के साथ एक संवाद दिखाना चाहता हूं। जब मैं संवाद प्रदर्शित करता हूं, तो मैं अपने पहले रेडियोबूटन के चारों ओर एक फोकस रेक्ट देखना चाहता हूं। (ताकि उपयोगकर्ता देख सके कि फोकस कहां है।) मैंने नियंत्रणों का आदेश दिया और tabindex प्रॉपर्टी को 0 से 4 पर सेट किया ताकि वे सही क्रम में हों। (रेडियोबॉक्स 1 में टैबिन्डेक्स 0 है, ...)

जब मैं संवाद दिखाता हूं तो पहले रेडियोबॉक्स पर ध्यान केंद्रित होता है, लेकिन इसके आसपास कोई फोकस नहीं होता है। (जब तक मैं टैब कुंजी दबाता हूं।)

मैंने एक पूरी तरह से खाली Winforms प्रोजेक्ट (विजुअल स्टूडियो 2010) बनाया, नियंत्रण जोड़ा और इसे शुरू किया। तो बिल्कुल कुछ खास नहीं है।

क्या कोई मुझे संकेत दे सकता है कि मैं क्या गलत कर रहा हूं?

Public Class Form1 

Private Sub Button1_Click(sender As System.Object, _ 
    e As System.EventArgs) _ 
    Handles Button1.Click 

    Me.Close() 
End Sub 

Private Sub Button2_Click(sender As System.Object, _ 
    e As System.EventArgs) _ 
    Handles Button2.Click 

    Me.Close() 
End Sub 

Private Sub Form1_Shown(sender As Object, _ 
    e As System.EventArgs) _ 
    Handles Me.Shown 

    RadioButton1.Focus() 
    RadioButton1.Select() 
    SendKeys.SendWait("{TAB}") 
    SendKeys.SendWait("+{TAB}") 

End Sub 

End Class 
+0

अहम ... मैं, यह कहना है कि मैं विंडोज 7 (64 बिट) – AlexS

+0

कठिन उपयोग कर रहा हूँ भूल गया ठीक करने के लिए बग, मैंने कोशिश की कुछ भी नहीं किया। –

+0

मैंने थोड़ा (बहुत) अधिक शोध किया और पाया कि फॉर्म में "टैब" कुंजी भेजना Control.ChangeUICues ईवेंट को आमंत्रित करता है जिसमें ध्वज UICuesEventArgs.ShowFocus को सत्य पर सेट किया गया है। (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.changeuicues.aspx) इस घटना के संसाधित होने के बाद, फोकस आयत दिखाई दे रहा है। क्या कोई जानता है, मैं इस घटना को सीधे कैसे ट्रिगर/कॉल कर सकता हूं? मुझे कोई ऐसी संपत्ति नहीं मिली जो मैं इसे सच में सेट कर सकता हूं ... – AlexS

उत्तर

5

जैसा कि मैंने टिप्पणी की, यह वास्तव में उपयोगकर्ता वरीयता सेटिंग है।

आयत को दिखाने के लिए लेकिन, अपने स्वयं के RadioButton इनहेरिट कोशिश करते हैं और ShowFocusCues समारोह को ओवरराइड:

Public Class RadioWithFocus 
    Inherits RadioButton 

    Protected Overrides ReadOnly Property ShowFocusCues() As Boolean 
    Get 
     Return True 
    End Get 
    End Property 

End Class 
1

अपने फार्म के प्रारंभ विधि, या जहां भी लागू में विरासत में मिला Control.Focus() का उपयोग करें:

क्षमा करें, यहाँ मेरी नमूने के कोड है। की तरह कुछ:

public Form1() { 
    //Other stuff here 
    radiobox1.Focus();// If this is the name of your control 
} 

एक अन्य विधि में है Form.Activate देखने के लिए। यह संभवतः इस संदर्भ में उपयोग करने के लिए बेहतर है

इसके अलावा, ActiveControl सहायक हो सकता है।

+0

मुझे फोकस विधि पता था और इसे पहले की कोशिश की। आपका। एक्टिवेट विधि एक अच्छा विचार था, लेकिन चाल न तो। : -/ – AlexS

+0

मेरा संपादन देखें .... – annonymously

0

रूप LarsTech ने कहा है, यह एक उपयोगकर्ता सेटिंग है। विंडोज 7 के लिए, आप यहां यह सेटिंग पा सकते हैं: ओपन कंट्रोल पैनल/एक्सेस सेंटर की आसानी/कीबोर्ड को उपयोग करना आसान बनाएं।

"अंडरलाइन कीबोर्ड शॉर्टकट्स और एक्सेस कुंजियों" टेक्स्ट के साथ चेकबॉक्स की तलाश करें और इसे जांचें।

अपने ऐप को फिर से करें और आप देखेंगे कि जब आपका फॉर्म पहले लोड होता है तो फोकस क्वेस अब दिखाई देंगे।

का आनंद लें

0

Win32/सी ++ के लिए, माता पिता खिड़की के WM_CHANGEUISTATE संदेश भेजने:

// Enable focus rect and accelerator underline in all controls. 
    ::SendMessage(WM_CHANGEUISTATE, MAKELONG(UIS_CLEAR, UISF_HIDEACCEL | UISF_HIDEFOCUS), 0); 
संबंधित मुद्दे