Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按下制表键对焦时,C#黑色矩形_C#_User Controls_Runtime_Paint - Fatal编程技术网

按下制表键对焦时,C#黑色矩形

按下制表键对焦时,C#黑色矩形,c#,user-controls,runtime,paint,C#,User Controls,Runtime,Paint,我需要一些帮助,在我自己的设计中创建一个用户控件。我已经创建了一个用户控件,它几乎完成了。它只需要稍微擦亮一点 我的问题: 如果我通过按tab键(在运行时,而不是设计时)来聚焦用户控件,则会在其上绘制一个恼人的矩形(黑色) 这是我当前的“解决方案”: 简单地用右边的画笔画出矩形 private void ButtonOnPaint(object sender, PaintEventArgs e) { if (Image != null | BackgroundImage != null)

我需要一些帮助,在我自己的设计中创建一个用户控件。我已经创建了一个用户控件,它几乎完成了。它只需要稍微擦亮一点

我的问题:
如果我通过按tab键(在运行时,而不是设计时)来聚焦用户控件,则会在其上绘制一个恼人的矩形(黑色)

这是我当前的“解决方案”:
简单地用右边的画笔画出矩形

private void ButtonOnPaint(object sender, PaintEventArgs e)
{
    if (Image != null | BackgroundImage != null)
        return;

    var penColor = Color.Transparent;

    if (!_mouseCurrentMoveOver)
        penColor = BackgroundColor;
    else if (_mouseCurrentMoveOver)
        penColor = MouseOverBackColor;

    if (_mouseCurrentDown)
        penColor = MouseDownBackColor;

    if (penColor == Color.Transparent)
        return;

    using (var p = new Pen(penColor))
    {
        var startPoint = new Point(5, 5);
        var sizeRectangle = new Size(
            _button.Width - startPoint.X * 2 - 1, 
            _button.Height - startPoint.Y * 2 - 1);

        e.Graphics.DrawRectangle(p, startPoint.X, startPoint.Y, sizeRectangle.Width, sizeRectangle.Height);
    }
}
这不起作用的原因是,如果我设置一个背景图像,它将被OnPaint事件过度渲染


所以问题是:如何禁用此焦点矩形?

在用户控件的构造函数中,您可以调用

SetStyle(ControlStyles.Selectable, false);

这将禁用在usercontrol中选择控件的功能,例如通过制表符。如果这是一个您想要保留的函数,那么这个解决方案对您不起作用。

您可能想查看一下。您可以尝试以下方法:
protectedoverride bool ShowFocusCues{get{return false;}}
谢谢您的提示,我已经尝试过了,但没有任何变化?嗯,我认为他想保持聚焦的能力,并摆脱线索。@TaW这可能是真的,也可能不是。考虑到你仍然有鼠标悬停的效果,这可能对他有用。不管怎么说,在没有任何标记的情况下使用制表符选择是很困难的。@Jens:通过制表符选择的功能应该是可用的。。。你的建议很有趣-谢谢但这不适用于此:)