我有一个派生自Forms.Control的控件,它处理鼠标事件和绘制事件就好了,但我遇到了关键事件的问题。我需要处理左箭头和右箭头,但到目前为止,包含我的类的Tab控件会吃掉它们。
如何使此控件可选择,可调焦?
答案 0 :(得分:2)
这是一个很好的教程,可以进行可聚焦控制。我只是按照它来确保它的工作原理。此外,向控件添加了按键事件,该控件在控件具有焦点的情况下工作。
基本上我所做的就是创建一个自定义控件的实例,它继承自Control。然后添加了KeyPress,Click和Paint事件。按键只是一条消息:
void CustomControl1_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show(string.Format("You pressed {0}", e.KeyChar));
}
点击事件只有:
this.Focus();
this.Invalidate();
我这样做的油漆事件,只是看得见:
protected override void OnPaint(PaintEventArgs pe)
{
if (ContainsFocus)
pe.Graphics.FillRectangle(Brushes.Azure, this.ClientRectangle);
else
pe.Graphics.FillRectangle(Brushes.Red, this.ClientRectangle);
}
然后,在主窗体中,在创建一个名为mycustomcontrol的实例并添加事件处理程序之后:
mycustomcontrol.Location = new Point(0, 0);
mycustomcontrol.Size = new Size(200, 200);
this.Controls.Add(mycustomcontrol);
这个例子比我的五分钟代码更整洁,只是想确保以这种方式解决你的问题。
希望这很有用。
答案 1 :(得分:1)
为了便于选择,您的控件必须设置ControlStyles.Selectable
样式。您可以通过调用SetStyle
在构造函数中执行此操作。
答案 2 :(得分:1)
在没有看到你的代码的情况下,我只能告诉你我创建了一个3 tab容器,并创建了一个非常简单的控件来覆盖OnGotFocus:
public partial class CustomControl1 : Control
{
public CustomControl1()
{
InitializeComponent();
}
protected override void OnGotFocus(EventArgs e)
{
this.BackColor = Color.Black;
base.OnGotFocus(e);
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
我将控件放在窗体上以及其他几个按钮,适当设置制表位,行为符合预期。在代码中更改了一些其他默认属性,导致控件无法选择。