我正在创建一个应用程序,当你按1时它会打开说SQL,如果你按2就会关闭SQL
好吧所以这就是问题,如果我有多个按钮,我使用keydown事件就可以在第一个按钮上工作 完全无视我的其他keydowns不用说这是一个问题,因为我的应用程序包含大约10个按钮,所有按钮都有自己的keydowns和特定的键,有人知道我怎么能让它正常工作
宣布我的流程
private static Process GetSQL()
{
Process sql = new Process();
return sql;
}
我如何杀死我的流程
public static void killSql()
{
System.Diagnostics.Process[] procs = null;
try
{
procs = Process.GetProcessesByName("Ssms");
Process sqlProc = procs[0];
if (!sqlProc.HasExited)
{
sqlProc.Kill();
}
}
finally
{
if (procs != null)
{
foreach (Process s in procs)
{
s.Dispose();
}
}
}
}
private void btnSQL_KeyDown1(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F3)
{
killSql();
}
}
我怎么称呼
private void btnSQL_Click(object sender, EventArgs e)
{
try
{
Process SQL = GetSQL();
SQL.StartInfo.FileName = (@"C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\Ssms.exe");
SQL.Start();
}
private void btnSQL_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F5)
{
this.KeyPreview = true;
GetSQL();
}
}
答案 0 :(得分:1)
请查看此article。简而言之 - 在任何给定时间只有一个控件可以有焦点,这个焦点将接收键盘输入。我建议你让你的窗户听键盘输入。
你可以做类似的事情 声明一个方法,它将启动你的过程:
void StartSQL()
{
Process SQL = GetSQL();
SQL.StartInfo.FileName = (@"C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\Ssms.exe");
SQL.Start();
}
然后在有keydown事件时调用此方法:
void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.F5)
{
StartSQL();
}
else if(....)
.....
}
并让您的相应按钮仅用于点击(它应该用于什么):
private void btnSQL_Click(object sender, EventArgs e)
{
StartSQL();
}