C# 点击按钮,那个将点击按键
在C#中,我希望单击一个按钮。我不想使用button之类的按钮事件。单击+=。。。我想点击表单应用程序中的按钮,我的计算机的任何键都会被点击。我试过SendKeys,但效果不好 我需要更多的想法怎么做。我试过:C# 点击按钮,那个将点击按键,c#,winforms,C#,Winforms,在C#中,我希望单击一个按钮。我不想使用button之类的按钮事件。单击+=。。。我想点击表单应用程序中的按钮,我的计算机的任何键都会被点击。我试过SendKeys,但效果不好 我需要更多的想法怎么做。我试过: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using S
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form5 : Form
{
Button[,] b;
List<char> chrlist = new List<char>();
public Form5()
{
InitializeComponent();
start();
}
public void start()
{
panel1.Controls.Clear();
int m = 13;
int n = 2;
b = new Button[n, m];
int x = 0;
int i, j;
int y = 0;
// int count = 0;
int chr1=(int)'A';
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
// count++;
b[i, j] = new Button();
b[i, j].SetBounds(x, y, panel1.Size.Width / m, panel1.Size.Height / n);
b[i, j].Name = i + "," + j;
b[i, j].Text = ((char)chr1).ToString();
b[i, j].Click += new EventHandler(ButtonClick);
panel1.Controls.Add(b[i, j]);
x = x + panel1.Size.Width / m;
chr1++;
}
y = y + panel1.Size.Height / n;
x = 0;
}
}
public void ButtonClick(Object sender, EventArgs e)
{
Button a = (Button)sender;
MessageBox.Show(a.Text);
}
public void started()
{
while (true)
{
int sec = 1000;
Thread.Sleep(sec * 3);
SendKeys.SendWait("{TAB}");
}
}
private void button1_Click(object sender, EventArgs e)
{
Thread workerThread = new Thread(started);
workerThread.Start();
}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用系统线程;
命名空间Windows窗体应用程序1
{
公共部分类表格5:表格
{
按钮[,]b;
List chrlist=新列表();
公共表格5()
{
初始化组件();
start();
}
公开作废开始()
{
panel1.控件。清除();
int m=13;
int n=2;
b=新按钮[n,m];
int x=0;
int i,j;
int y=0;
//整数计数=0;
int chr1=(int)“A”;
对于(i=0;i
}
这在我的另一个应用程序中不起作用。在我看来,您似乎正在尝试构建一个屏幕键盘 前提:使用SendKeys向活动应用程序发送信函 问题:当您单击表单中的按钮发送信函时,什么应用程序具有焦点 回答:你的。因此,密钥将被发送到您的应用程序,而不是上次关注的应用程序 解决方案:防止您的应用程序变得专注 这可以通过在扩展窗口样式中通过CreateParams()设置WS_EX_NOACTIVATE标志来实现 现在,当您单击OSK中的一个按钮时,当前关注的应用程序将保持关注(因为您的应用程序无法接收关注),SendKeys()将正确地定位它 *注意事项:仅当屏幕键盘是不同的应用程序时,此功能才有效。换句话说,OSK不能在您自己的应用程序中针对其他表单……这是一个奇怪的焦点问题。要定位您自己的应用程序,您必须手动跟踪应用程序中的最后一个表单,并在发送密钥之前再次对其进行聚焦 这是您的OSK向记事本发送按键: 这是我的测试应用程序中的所有代码:
public partial class Form1 : Form
{
private Button[,] b;
private const int WS_EX_NOACTIVATE = 0x08000000;
protected override CreateParams CreateParams
{
get
{
CreateParams p = base.CreateParams;
p.ExStyle |= WS_EX_NOACTIVATE;
return p;
}
}
public Form1()
{
InitializeComponent();
start();
}
public void start()
{
panel1.Controls.Clear();
int m = 13;
int n = 2;
b = new Button[n, m];
int x = 0;
int i, j;
int y = 0;
// int count = 0;
int chr1 = (int)'A';
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
// count++;
b[i, j] = new Button();
b[i, j].SetBounds(x, y, panel1.Size.Width / m, panel1.Size.Height / n);
b[i, j].Name = i + "," + j;
b[i, j].Text = ((char)chr1).ToString();
b[i, j].Click += new EventHandler(ButtonClick);
panel1.Controls.Add(b[i, j]);
x = x + panel1.Size.Width / m;
chr1++;
}
y = y + panel1.Size.Height / n;
x = 0;
}
}
public void ButtonClick(Object sender, EventArgs e)
{
SendKeys.Send(((Control)sender).Text);
}
}
公共部分类表单1:表单
{
专用按钮[,]b;
私有常量int WS_EX_NOACTIVATE=0x08000000;
受保护的重写CreateParams CreateParams
{
得到
{
CreateParams p=base.CreateParams;
p、 ExStyle |=WS_EX|u NOACTIVATE;
返回p;
}
}
公共表格1()
{
初始化组件();
start();
}
公开作废开始()
{
panel1.控件。清除();
int m=13;
int n=2;
b=新按钮[n,m];
int x=0;
int i,j;
int y=0;
//整数计数=0;
int chr1=(int)“A”;
对于(i=0;i
请编辑您的问题,并逐步解释您的程序在什么情况下应该做什么,因为目前还不清楚单击或按下按钮时您希望发生什么。非常经典的可用性抱怨。键盘没有“任意键”键。您也不能在代码中单击它。正确执行此操作需要pinvoke使用SendInput()。在你获得一些经验之前,你可能想把它放在架子上。看似容易做的事情并不总是容易的。干扰你没有编写的另一个程序当然属于“不容易”的范畴,但它的作用是:private const int WS_EX_NOACTIVATE=0x08000000;受保护的覆盖CreateParams CreateParams{get{CreateParams p=base.CreateParams;p.ExStyle |=WS_EX_NOACTIVATE;return p;}}}公共无效按钮单击(对象发送方,事件参数e){SendKeys.Send((控制)发送方).Text);}它将WS_EX_NOACTIVATE标志添加到表单的扩展窗口样式中。有关更多信息,请参见“WS_EX_NOACTIVATE”-使用此样式创建的顶级窗口
public partial class Form1 : Form
{
private Button[,] b;
private const int WS_EX_NOACTIVATE = 0x08000000;
protected override CreateParams CreateParams
{
get
{
CreateParams p = base.CreateParams;
p.ExStyle |= WS_EX_NOACTIVATE;
return p;
}
}
public Form1()
{
InitializeComponent();
start();
}
public void start()
{
panel1.Controls.Clear();
int m = 13;
int n = 2;
b = new Button[n, m];
int x = 0;
int i, j;
int y = 0;
// int count = 0;
int chr1 = (int)'A';
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
// count++;
b[i, j] = new Button();
b[i, j].SetBounds(x, y, panel1.Size.Width / m, panel1.Size.Height / n);
b[i, j].Name = i + "," + j;
b[i, j].Text = ((char)chr1).ToString();
b[i, j].Click += new EventHandler(ButtonClick);
panel1.Controls.Add(b[i, j]);
x = x + panel1.Size.Width / m;
chr1++;
}
y = y + panel1.Size.Height / n;
x = 0;
}
}
public void ButtonClick(Object sender, EventArgs e)
{
SendKeys.Send(((Control)sender).Text);
}
}