c# KeyDown控制MouseClick 120
我已经知道屏幕坐标XY并可以在laber中显示如何用键盘的KeyDown控制MouseClick(就是点击键盘如同控制鼠标单击)有知道发源码给我··小弟在此谢过·····...
我已经知道屏幕坐标X Y 并可以在 laber 中显示 如何用键盘的 KeyDown控制MouseClick (就是点击键盘如同控制 鼠标单击) 有知道发源码给我··小弟在此谢过·········坐标如何发送到剪切板~~~
大哥···给写点代码 ····谢谢···特别是“使用WindowFromPoint获取鼠标所在位置控件的句柄,然后使用SendMessage向这个句柄发送鼠标单击的消息 ” 解释下·······如果记录from 窗体外的按键又怎么弄··也就是说控制OS系统的鼠标······ 本人看的书多 但是写代码有点昏·· 展开
大哥···给写点代码 ····谢谢···特别是“使用WindowFromPoint获取鼠标所在位置控件的句柄,然后使用SendMessage向这个句柄发送鼠标单击的消息 ” 解释下·······如果记录from 窗体外的按键又怎么弄··也就是说控制OS系统的鼠标······ 本人看的书多 但是写代码有点昏·· 展开
展开全部
首先解释一下,你要使用键盘的KeyDown控制MouseClick的鼠标点击事件,就要将MouseClick点击的事件绑定到KeyDown事件上。或者,使用委托,首先写出MouseClick事件的方法,然后将方法绑定到KeyDown的委托链上。
下面是代码:(跟你描述的问题是一样的例子。)
List<Form> listform;//初始化窗体容器中所包含的窗体集合
int j = 0;//窗体集合的初始索引值
int co;//初始化容器中的总窗体数
//加载窗体
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Dock = DockStyle.Fill;
f2.TopLevel = false;
if (panel1.Controls.Count == 0)
{
panel1.Controls.Add(f2);
}
foreach (Form f in panel1.Controls)
{
if (f.Text != "Form2")
this.panel1.Controls.Add(f2);
}
f2.Show();
f2.BringToFront();
}
private void button2_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.Dock = DockStyle.Fill;
f3.TopLevel = false;
if (panel1.Controls.Count == 0)
{
panel1.Controls.Add(f3);
}
foreach (Form f in panel1.Controls)
{
if (f.Text != "Form3")
this.panel1.Controls.Add(f3);
}
f3.Show();
f3.BringToFront();
}
private void button3_Click(object sender, EventArgs e)
{
Form4 f4 = new Form4();
f4.Dock = DockStyle.Fill;
f4.TopLevel = false;
if (panel1.Controls.Count == 0)
{
panel1.Controls.Add(f4);
}
foreach (Form f in panel1.Controls)
{
if (f.Text != "Form4")
this.panel1.Controls.Add(f4);
}
f4.Show();
f4.BringToFront();
}
//按下Crtl+Tab的事件遍历窗体容器中的窗体,并将窗体名添加到另外一个层中,用来对窗体容器中的窗体进行切换控制
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode==Keys.Tab&&e.Control)
{
//e.Handled = true;
if(panel1.Controls.Count!=0)
{
int i = 1;
foreach(Form fs in listform)
{
if (i > 11)
break;
LinkLabel linkLable = new LinkLabel();
linkLable.Text = fs.Text;
linkLable.Tag = fs.Text;
linkLable.TabIndex = i;
linkLable.LinkClicked += new LinkLabelLinkClickedEventHandler(link_LinkClick);
linkLable.Enter+=new EventHandler(link_Enter);
linkLable.Leave += new EventHandler(linkLable_Leave);
panel3.Controls.Add(linkLable);
linkLable.Location = new Point(20, i * 20 + 20);//定位
i++;
}
co = listform.Count;
}
this.panel3.Visible = true;
if (j < co&&panel3.Controls.Count>0)
{
listform[j].BringToFront();
panel3.Controls[j].Focus();
j++;
}
else if (j>=co && panel3.Controls.Count>0)
{
j = 0;
listform[j].BringToFront();
panel3.Controls[j].Focus();
j++;
}
}
}
//鼠标点击事件
private void link_LinkClick(object sender, LinkLabelLinkClickedEventArgs e)
{
foreach (Form fff in listform)
{
if ((sender as LinkLabel).Text==fff.Text)
{
panel3.Visible = false;
fff.BringToFront();
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
//释放Ctrl键事件
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ControlKey&&panel3.Visible==true)
{
//e.Handled = true;
this.panel3.Visible = false;
panel3.Controls.Clear();
listform[j - 1].BringToFront();
}
}
//linkLable获取焦点的事件
private void link_Enter(object sender, EventArgs e)
{
foreach (Form fff in panel1.Controls)
{
if ((sender as LinkLabel).Text == fff.Text)
{
Label lable1 = new Label();
lable1.Text = (sender as LinkLabel).Text;
lable1.Tag = "newlablel";
panel3.Controls.Add(lable1);
lable1.Location = new Point(2,5);
(sender as LinkLabel).BackColor = Color.Turquoise;
fff.BringToFront();
}
}
}
//panel中添加窗体的事件
private void panel1_ControlAdded(object sender, ControlEventArgs e)
{
listform = new List<Form>();
foreach(Form f in panel1.Controls)
{
listform.Add(f);
if (listform.Count >= 10)
return;
}
}
//linkLable失去焦点事件。
private void linkLable_Leave(object sender, EventArgs e)
{
(sender as LinkLabel).BackColor = Color.NavajoWhite;
foreach (Control c in panel3.Controls)
{
if (c.Tag.ToString() == "newlablel")
{
panel3.Controls.Remove(c);
}
}
}
}
希望帮到你。如果有帮助记得给分哦。呵呵。
下面是代码:(跟你描述的问题是一样的例子。)
List<Form> listform;//初始化窗体容器中所包含的窗体集合
int j = 0;//窗体集合的初始索引值
int co;//初始化容器中的总窗体数
//加载窗体
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Dock = DockStyle.Fill;
f2.TopLevel = false;
if (panel1.Controls.Count == 0)
{
panel1.Controls.Add(f2);
}
foreach (Form f in panel1.Controls)
{
if (f.Text != "Form2")
this.panel1.Controls.Add(f2);
}
f2.Show();
f2.BringToFront();
}
private void button2_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.Dock = DockStyle.Fill;
f3.TopLevel = false;
if (panel1.Controls.Count == 0)
{
panel1.Controls.Add(f3);
}
foreach (Form f in panel1.Controls)
{
if (f.Text != "Form3")
this.panel1.Controls.Add(f3);
}
f3.Show();
f3.BringToFront();
}
private void button3_Click(object sender, EventArgs e)
{
Form4 f4 = new Form4();
f4.Dock = DockStyle.Fill;
f4.TopLevel = false;
if (panel1.Controls.Count == 0)
{
panel1.Controls.Add(f4);
}
foreach (Form f in panel1.Controls)
{
if (f.Text != "Form4")
this.panel1.Controls.Add(f4);
}
f4.Show();
f4.BringToFront();
}
//按下Crtl+Tab的事件遍历窗体容器中的窗体,并将窗体名添加到另外一个层中,用来对窗体容器中的窗体进行切换控制
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode==Keys.Tab&&e.Control)
{
//e.Handled = true;
if(panel1.Controls.Count!=0)
{
int i = 1;
foreach(Form fs in listform)
{
if (i > 11)
break;
LinkLabel linkLable = new LinkLabel();
linkLable.Text = fs.Text;
linkLable.Tag = fs.Text;
linkLable.TabIndex = i;
linkLable.LinkClicked += new LinkLabelLinkClickedEventHandler(link_LinkClick);
linkLable.Enter+=new EventHandler(link_Enter);
linkLable.Leave += new EventHandler(linkLable_Leave);
panel3.Controls.Add(linkLable);
linkLable.Location = new Point(20, i * 20 + 20);//定位
i++;
}
co = listform.Count;
}
this.panel3.Visible = true;
if (j < co&&panel3.Controls.Count>0)
{
listform[j].BringToFront();
panel3.Controls[j].Focus();
j++;
}
else if (j>=co && panel3.Controls.Count>0)
{
j = 0;
listform[j].BringToFront();
panel3.Controls[j].Focus();
j++;
}
}
}
//鼠标点击事件
private void link_LinkClick(object sender, LinkLabelLinkClickedEventArgs e)
{
foreach (Form fff in listform)
{
if ((sender as LinkLabel).Text==fff.Text)
{
panel3.Visible = false;
fff.BringToFront();
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
//释放Ctrl键事件
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ControlKey&&panel3.Visible==true)
{
//e.Handled = true;
this.panel3.Visible = false;
panel3.Controls.Clear();
listform[j - 1].BringToFront();
}
}
//linkLable获取焦点的事件
private void link_Enter(object sender, EventArgs e)
{
foreach (Form fff in panel1.Controls)
{
if ((sender as LinkLabel).Text == fff.Text)
{
Label lable1 = new Label();
lable1.Text = (sender as LinkLabel).Text;
lable1.Tag = "newlablel";
panel3.Controls.Add(lable1);
lable1.Location = new Point(2,5);
(sender as LinkLabel).BackColor = Color.Turquoise;
fff.BringToFront();
}
}
}
//panel中添加窗体的事件
private void panel1_ControlAdded(object sender, ControlEventArgs e)
{
listform = new List<Form>();
foreach(Form f in panel1.Controls)
{
listform.Add(f);
if (listform.Count >= 10)
return;
}
}
//linkLable失去焦点事件。
private void linkLable_Leave(object sender, EventArgs e)
{
(sender as LinkLabel).BackColor = Color.NavajoWhite;
foreach (Control c in panel3.Controls)
{
if (c.Tag.ToString() == "newlablel")
{
panel3.Controls.Remove(c);
}
}
}
}
希望帮到你。如果有帮助记得给分哦。呵呵。
展开全部
楼主神昏颠倒,语义不清,不过你提到了label,估计是想把前台的东西传到后台吧。直接传到后台你可以用后台控件button,但用键盘就不行了,是吧?
如果是这样,这样吧,比如你的后台Button ID是button1
前台这样写,添加到head中:
<script>
var ev = window.event || e;
if (ev.keyCode == "13")
{document.getElementById('button1').click();};</script>
后台和你原来的完全一样,即写button1的事件即可:
这样子,你点enter键和用鼠标直接点button1的效果完全一样了
如果是这样,这样吧,比如你的后台Button ID是button1
前台这样写,添加到head中:
<script>
var ev = window.event || e;
if (ev.keyCode == "13")
{document.getElementById('button1').click();};</script>
后台和你原来的完全一样,即写button1的事件即可:
这样子,你点enter键和用鼠标直接点button1的效果完全一样了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
KeyDown事件里面获取鼠标当前坐标,然后使用WindowFromPoint获取鼠标所在位置控件的句柄,然后使用SendMessage向这个句柄发送鼠标单击的消息,明白了吧?
具体过程不写了,思路给你了,分拿来!
具体过程不写了,思路给你了,分拿来!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询