0

我有一个派生自 Forms.Control 的控件,它可以很好地处理鼠标事件和绘制事件,但是我遇到了关键事件的问题。我需要处理左箭头和右箭头,但到目前为止,包含我的类的 Tab 控件吃掉了这些。

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

4

3 回答 3

2

这是一个很好的教程来制作一个可聚焦的控件。我只是按照它来确保它有效。此外,向控件添加了一个按键事件,该事件在控件具有焦点的情况下起作用。

http://en.csharp-online.net/Architecture_and_Design_of_Windows_Forms_Custom_Controls%E2%80%94Creating_a_Focusable_Control

基本上我所做的只是创建一个我的自定义控件的实例,它继承自 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);

该示例比我的五分钟代码要简洁得多,只是想确保可以通过这种方式解决您的问题。

希望这会有所帮助。

于 2010-05-03T17:49:46.070 回答
1

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

于 2010-05-03T17:38:04.510 回答
1

没有看到你的代码,我只能告诉你我创建了一个 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);
    }
}

我将控件与其他几个按钮一起放在表单上,​​适当地设置制表位,并且行为符合预期。代码中的某些其他默认属性已更改,导致控件无法选择。

于 2010-05-03T17:42:28.033 回答