2010-07-01 20 views
8

मैं दृश्य अनुकरण कैसे कर सकता हूं मेरे फॉर्म (WinForms) में एक बटन पर क्लिक करें?अनुकरण बटन पर क्लिक करें

मेरा मतलब नहीं है:

Button_Press(MyButton, new KeyPressEventArgs());

मैं उपयोगकर्ता (नेत्रहीन) देखने के लिए बटन क्लिक किया जा रहा चाहता हूँ।

बेशक

मैं इस तरह के

SendKeys.Send("{ENTER}") 

या अन्य कार्यों के उपयोग करने के लिए नहीं करना चाहती।

+1

आप किस तकनीक का उपयोग कर रहे हैं? WinForms? WPF? ASP.NET? सिल्वरलाइट? –

+0

वह (या वह?) पहले ही उल्लेख कर चुका है। –

+0

एनिमेटेड gif? शायद कुछ – CheeseConQueso

उत्तर

1

यदि आप एक सामान्य बटन के बजाय रेडियोबटन का उपयोग करते हैं, तो आप इसे सेट कर सकते हैं। "संपत्ति" पर संपत्ति का गुण और फिर इसे संशोधित करें। कहीं और से जांच की गई संपत्ति।

उदाहरण के लिए।

this.radioButton1.Appearance = Appearance.Button; 

और फिर कहते हैं:

this.radioButton1.Checked = true; 

या

this.radioButton1.Checked = false; 

यह सिर्फ एक नियमित रूप से बटन की तरह दिखाई देगा।

+0

मुझे याद आ रही है यदि सामान्य बटन के साथ ऐसा करने का कोई तरीका है तो मुझे रूचि है। वैसे भी धन्यवाद। – Ohad

1

ऐसा करने का कोई साफ तरीका नहीं है। user32.dll से mouse_event फ़ंक्शन का उपयोग करने का एकमात्र तरीका है। यह भी आवश्यक है कि आप अस्थायी रूप से कर्सर को वांछित स्थान पर ले जाएं, क्लिक करें, फिर इसे वापस ले जाएं।

[DllImport("user32.dll", CharSet = CharSet.Auto, 
CallingConvention = CallingConvention.StdCall)] 
public static extern void mouse_event(long dwFlags, long dx, long dy, 
    long cButtons, long dwExtraInfo); 

private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
private const int MOUSEEVENTF_LEFTUP = 0x04; 
private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
private const int MOUSEEVENTF_RIGHTUP = 0x10; 

public void ClickMouseLeftButton(Point globalLocation) 
{ 
    Point currLocation = Cursor.Position; 

    Cursor.Position = globalLocation; 

    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 
     globalLocation.X, globalLocation.Y, 0, 0); 

    Cursor.Position = currLocation; 
} 

public void ClickControl(Control target, Point localLocation) 
{ 
    ClickMouseLeftButton(target.PointToScreen(localLocation)); 
} 

public void ClickControl(Control target) 
{ 
    ClickControl(target, new Point(target.Width/2, target.Height/2)); 
} 

वैकल्पिक रूप से, अगर आप एक एक्सटेंशन विधि में इस बदल सकता है:

public static class ControlExtensions 
{ 
    [DllImport("user32.dll", CharSet = CharSet.Auto, 
    CallingConvention = CallingConvention.StdCall)] 
    private static extern void mouse_event(long dwFlags, long dx, long dy, 
     long cButtons, long dwExtraInfo); 

    private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
    private const int MOUSEEVENTF_LEFTUP = 0x04; 
    private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
    private const int MOUSEEVENTF_RIGHTUP = 0x10; 

    private static void ClickMouseLeftButton(Point globalLocation) 
    { 
     Point currLocation = Cursor.Position; 

     Cursor.Position = globalLocation; 

     mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 
      globalLocation.X, globalLocation.Y, 0, 0); 

     Cursor.Position = currLocation; 
    } 

    public static void ClickMouse(this Control target, Point localLocation) 
    { 
     ClickMouseLeftButton(target.PointToScreen(localLocation)); 
    } 

    public static void ClickMouse(this Control target) 
    { 
     ClickMouse(target, new Point(target.Width/2, target.Height/2)); 
    } 
} 

यह अनुमति देगा आप कॉल करना controlName.ClickMouse();

+0

user32.dll से SendInput उसी तरह से उपयोग किया जा सकता है, इसके बारे में माउस कर्सर को ले जाने के बारे में समान चेतावनी के साथ। – Greg

1

यहाँ एक हास्यास्पद सरल उपाय है:

button1.Focus(); 
SendKeys.Send(" "); 
+0

जो बटन के क्लिक को दृष्टि से अनुकरण नहीं करता है (जैसा कि ओपी ने पूछा था)। –

2

आप हमेशा White कोशिश कर सकते हैं। मैंने देखा है कि यह माउस पॉइंटर को ले जा रहा है और मेरे स्वचालित यूआई परीक्षणों में सिल्वरलाइट यूआई तत्वों पर स्पष्ट रूप से क्लिक कर रहा है; मुझे लगता है कि WinForms के साथ ऐसा ही होगा लेकिन मैं निश्चित रूप से कुछ नहीं कह सकता।

2
Button1.PerformClick 

बहुत आसान एक लाइनर। हेयर यू गो।

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