2010-07-01 5 views
8

Как смоделировать visual нажмите на кнопку в моей форме (WinForms)?Имитация нажмите кнопку

Я не имею в виду:

Button_Press(MyButton, new KeyPressEventArgs());

Я хочу, чтобы пользователь видел (визуально) кнопка быть нажата.

Конечно, я не хочу использовать

SendKeys.Send("{ENTER}") 

или другие функции подобного рода.

+1

Какие технологии вы используете? WinForms? WPF? ASP.NET? Silverlight? –

+0

Он (или она?) Уже упомянула об этом. –

+0

анимированный gif? возможно, что-то не хватает – CheeseConQueso

ответ

1

Если вы используете RadioButton вместо обычной кнопки, вы можете установить его свойство .Appearance на «Button», а затем изменить его свойство .Checked из другого места.

например.

this.radioButton1.Appearance = Appearance.Button; 

, а затем вызвать:

this.radioButton1.Checked = true; 

или

this.radioButton1.Checked = false; 

Это будет выглядеть так же, как обычная кнопка.

+0

Мне интересно, есть ли способ сделать это с помощью обычных кнопок. спасибо в любом случае. – Ohad

1

Существует нет чистого способа сделать это. Единственный способ, которым я знаю, - использовать функцию mouse_event от user32.dll. Это также требует, чтобы вы временно переместили курсор в нужное место, выполните щелчок, а затем переместите его назад.

[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

SendInput из user32.dll может использоваться аналогичным образом, с аналогичными предостережениями об этом, перемещающем курсор мыши. – Greg

1

Вот смешного простое решение:

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

Который не визуально эмулирует нажатие кнопки (как запросил ОП). –

2

Вы всегда можно было попробовать White. Я заметил, что он перемещает указатель мыши и явно нажимает на элементы интерфейса Silverlight в моих автоматизированных тестах пользовательского интерфейса; Я предполагаю, что то же самое произойдет с WinForms, но я не могу сказать наверняка.

2
Button1.PerformClick 

Очень простой один вкладыш. Ну вот.

Смежные вопросы