
关于获取任意键盘事件, 我先整体的说明下 在C#中:
1 那些支持键盘输入的控件(如TextBox,RichTextBox等), 或者Form窗体, 能够使用Key系列函数(KeyDown, KeyUp, KeyPress) 这些函数可以获取键盘事件
2 此外, 那些容器控件(Form, Panel等), 可以通过PreviewKeyDown函数截取穿过容器的键盘事件, 从而在其子控件获取某键盘事件之前, 先截获它们 但有一个前提是, 这些容器需要获得输入焦点(即panel1Focused())
我们查看Panel, 发现Panel的CanFocus(只读)属性为假, 即Panel不能够获得焦点 此外, 即使Panel中存在能够获得输入焦点的空间(TextBox), Panel的
PreviewKeyDown函数也不能工作
因此, 结论是Panel不能够较好的获取键盘事件
针对这个问题, 我建议的一种可行的方法, 就是加入一个专门用于接收键盘的控件, 如TextBox, 并在程序中保证它始终获取焦点(这点是很重要的, 如果程序中还有其他能够获取焦点的控件, 则必须在它们获取焦点时通过Focus函数将焦点还给TextBox),这样就能很好的接收键盘输入了
希望对你有帮助
$('input[name="name"]')on('input propertychange', function(event) {
var _this = $(this);
var vals = _thisval();
if(vals!=''){
setTimeout(function(){
_thisnext()focus();
},1000)
}
});
首先解释一下,你要使用键盘的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();
f2Dock = DockStyleFill;
f2TopLevel = false;
if (panel1ControlsCount == 0)
{
panel1ControlsAdd(f2);
}
foreach (Form f in panel1Controls)
{
if (fText != "Form2")
thispanel1ControlsAdd(f2);
}
f2Show();
f2BringToFront();
}
private void button2_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3Dock = DockStyleFill;
f3TopLevel = false;
if (panel1ControlsCount == 0)
{
panel1ControlsAdd(f3);
}
foreach (Form f in panel1Controls)
{
if (fText != "Form3")
thispanel1ControlsAdd(f3);
}
f3Show();
f3BringToFront();
}
private void button3_Click(object sender, EventArgs e)
{
Form4 f4 = new Form4();
f4Dock = DockStyleFill;
f4TopLevel = false;
if (panel1ControlsCount == 0)
{
panel1ControlsAdd(f4);
}
foreach (Form f in panel1Controls)
{
if (fText != "Form4")
thispanel1ControlsAdd(f4);
}
f4Show();
f4BringToFront();
}
//按下Crtl+Tab的事件遍历窗体容器中的窗体,并将窗体名添加到另外一个层中,用来对窗体容器中的窗体进行切换控制
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if(eKeyCode==KeysTab&&eControl)
{
//eHandled = true;
if(panel1ControlsCount!=0)
{
int i = 1;
foreach(Form fs in listform)
{
if (i > 11)
break;
LinkLabel linkLable = new LinkLabel();
linkLableText = fsText;
linkLableTag = fsText;
linkLableTabIndex = i;
linkLableLinkClicked += new LinkLabelLinkClickedEventHandler(link_LinkClick);
linkLableEnter+=new EventHandler(link_Enter);
linkLableLeave += new EventHandler(linkLable_Leave);
panel3ControlsAdd(linkLable);
linkLableLocation = new Point(20, i 20 + 20);//定位
i++;
}
co = listformCount;
}
thispanel3Visible = true;
if (j < co&&panel3ControlsCount>0)
{
listform[j]BringToFront();
panel3Controls[j]Focus();
j++;
}
else if (j>=co && panel3ControlsCount>0)
{
j = 0;
listform[j]BringToFront();
panel3Controls[j]Focus();
j++;
}
}
}
//鼠标点击事件
private void link_LinkClick(object sender, LinkLabelLinkClickedEventArgs e)
{
foreach (Form fff in listform)
{
if ((sender as LinkLabel)Text==fffText)
{
panel3Visible = false;
fffBringToFront();
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
//释放Ctrl键事件
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (eKeyCode == KeysControlKey&&panel3Visible==true)
{
//eHandled = true;
thispanel3Visible = false;
panel3ControlsClear();
listform[j - 1]BringToFront();
}
}
//linkLable获取焦点的事件
private void link_Enter(object sender, EventArgs e)
{
foreach (Form fff in panel1Controls)
{
if ((sender as LinkLabel)Text == fffText)
{
Label lable1 = new Label();
lable1Text = (sender as LinkLabel)Text;
lable1Tag = "newlablel";
panel3ControlsAdd(lable1);
lable1Location = new Point(2,5);
(sender as LinkLabel)BackColor = ColorTurquoise;
fffBringToFront();
}
}
}
//panel中添加窗体的事件
private void panel1_ControlAdded(object sender, ControlEventArgs e)
{
listform = new List<Form>();
foreach(Form f in panel1Controls)
{
listformAdd(f);
if (listformCount >= 10)
return;
}
}
//linkLable失去焦点事件。
private void linkLable_Leave(object sender, EventArgs e)
{
(sender as LinkLabel)BackColor = ColorNavajoWhite;
foreach (Control c in panel3Controls)
{
if (cTagToString() == "newlablel")
{
panel3ControlsRemove(c);
}
}
}
}
希望帮到你。如果有帮助记得给分哦。呵呵。
1、焦点是为了便于确认,所要 *** 作的键盘事件所对应程序中的控件是哪个。
2、WinForm中的界面控件可以通过切换焦点来对应所要 *** 作的控件。
3、一般的界面控件都具有获得焦点的事件,并且界面中的控件都有获取焦点的顺序编号属性(在界面中的控件焦点可以通过TAB来进行焦点切换)
如何能让焦点放在自定义控件上?
TabIndex属性
ShowDialog显示出窗体后触发什么事件嘛
窗体的PageLoad事件
控件的 OnPaint事件
补充:
如果是TextBox就好办了啊,C控件设计里,对TabIndex属性做好排序0、1、2
然后你的B窗体里使用C控件时,将C控件的TabIndex设置为0, B窗体里的其他控件也要做好排序设置1、2、3、4、5
再d出B的时候,焦点就在C控件的TextBox上。
你好,Focus()函数的作用是让控件获取焦点。
我们在Load()事件中执行Focus()不生效的原因是因为这个时候,窗体还没有显示出来,导致执行Focus()没有效果。
解决办法是,在load事件中加一句thisShow();
C#添加事件的代码(为btn1的获取焦点事件添加btn1_GotFocus事件处理器)
这句代码一般卸载窗体的构造函数中InitializeComponent();之后:
btn1GotFocus+= new EventHandler( btn1_GotFocus);
界面上 *** 作的话,选择你需要的控件,在属性卡中点击第一排图标的闪电图标,就会找到事件属性编辑,在下面找到对应的事件,直接选择或输入就可以了。
以上就是关于C#中panel 如何获取健盘事件全部的内容,包括:C#中panel 如何获取健盘事件、js jQuery 触发获取焦点、c# KeyDown控制MouseClick等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)