C# 带有TabStop和key事件的Windows.Forms.Control派生类

C# 带有TabStop和key事件的Windows.Forms.Control派生类,c#,winforms,controls,focus,keyevent,C#,Winforms,Controls,Focus,Keyevent,我有一个从Forms.control派生的控件,它可以很好地处理鼠标事件和绘制事件,但是我在关键事件方面遇到了问题。我需要处理Left-arrow和Right-arrow,但到目前为止,包含我的类的Tab控件会吃掉它们 如何使此控件可选择、可聚焦?为了可选择,您的控件必须设置样式。您可以在构造函数中通过调用来执行此操作。为了可选择,您的控件必须设置样式。您可以通过调用构造函数来实现这一点。在没有看到代码的情况下,我只能告诉您,我创建了一个3选项卡容器,并创建了一个非常简单的控件,该控件覆盖了On

我有一个从Forms.control派生的控件,它可以很好地处理鼠标事件和绘制事件,但是我在关键事件方面遇到了问题。我需要处理Left-arrow和Right-arrow,但到目前为止,包含我的类的Tab控件会吃掉它们


如何使此控件可选择、可聚焦?

为了可选择,您的控件必须设置样式。您可以在构造函数中通过调用来执行此操作。

为了可选择,您的控件必须设置样式。您可以通过调用构造函数来实现这一点。

在没有看到代码的情况下,我只能告诉您,我创建了一个3选项卡容器,并创建了一个非常简单的控件,该控件覆盖了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);
    }
}

我放弃了表单上的控件以及其他几个按钮,适当地设置了制表位,行为如预期的那样。代码中的某些其他默认属性已更改,导致控件无法选择。

在没有看到您的代码的情况下,我只能告诉您,我创建了一个3选项卡容器,并创建了一个非常简单的控件,该控件覆盖了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);
    }
}

我放弃了表单上的控件以及其他几个按钮,适当地设置了制表位,行为如预期的那样。代码中的一些其他默认属性已更改,导致控件无法选择。

下面是一个制作可聚焦控件的好教程。我只是跟着它来确保它能正常工作。此外,还向控件添加了一个按键事件,该事件在控件具有焦点的情况下工作

基本上,我所做的就是创建一个自定义控件的实例,它继承自控件。然后添加了按键、单击和绘制事件。按键只是一条信息:

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);
这个例子比我的五分钟代码要简洁得多,我只是想确定用这种方式解决问题是可能的


希望这会有帮助。

这是一个制作聚焦控件的好教程。我只是跟着它来确保它能正常工作。此外,还向控件添加了一个按键事件,该事件在控件具有焦点的情况下工作

基本上,我所做的就是创建一个自定义控件的实例,它继承自控件。然后添加了按键、单击和绘制事件。按键只是一条信息:

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);
这个例子比我的五分钟代码要简洁得多,我只是想确定用这种方式解决问题是可能的


希望这会有帮助。

我做了,但这显然不是全部。我需要处理一个特定的事件还是什么?我确实需要,但这显然不是全部。我需要处理一个特定的事件还是什么?