没有焦点/激活的表格

问题描述

| 我想为我的多行文本框实现类似intellisense的功能。智能感知控件以标准形式放置,没有控件框(因此,看不到标题或最大化/最小化botton)。 一切正常,但是如果显示了intellisense-form且用户单击了intellisense表单,则主表单将失去焦点(因此,用户必须单击回到文本框以进行编写)。 我知道“ 0”属性,但它仅适用于激活,不适用于“标准焦点”。 编辑: 我在http://www.daniweb.com/software-development/csharp/threads/273724上找到了帮助,但是显示代码不起作用。它在\“ Show()\”方法期间引发\“无效参数\”异常。     

解决方法

        要显示不激活的表单,请覆盖ShowWithoutActivation属性
protected override bool ShowWithoutActivation
{
  get { return true; }
}
并且,即使您不想在单击鼠标时也要激活表单,请覆盖CreateParams并设置这些样式
protected override CreateParams CreateParams
{
  get
  {
    CreateParams p = base.CreateParams;

    p.Style |= 0x40000000; // WS_CHILD
    p.ExStyle |= 0x8000000; // WS_EX_NOACTIVATE - requires Win 2000 or higher :)

    return p;
  }
}
    ,        某天我有一个代码,我是从代码项目中下载的(我认为),我不知道原始的下载链接是什么,请尝试使用此代码
using System;
using System.Drawing;
using System.Windows.Forms;

namespace Balloon.NET
{
    public class BalloonWindow : Form
    {
        public static readonly int TIPMARGIN;
        public static readonly int TIPTAIL;

        public BalloonWindow();

        public Point AnchorPoint { get; set; }
        public BalloonWindow.BallonQuadrant Quadrant { get; }

        public static Point AnchorPointFromControl(Control anchorControl);
        protected override void Dispose(bool disposing);
        protected override void OnLoad(EventArgs e);
        protected virtual Rectangle OnNCCalcSize(Rectangle windowRect);
        protected virtual void OnNCPaint(Graphics g);
        protected override void OnResize(EventArgs e);
        protected void RecalcLayout();
        protected void RepositionWindow(Point oldAnchorPoint,Point newAnchorPoint);
        public void ShowBalloon(Control anchorControl);
        protected override void WndProc(ref Message m);

        public enum BallonQuadrant
        {
            TopLeft = 0,TopRight = 1,BottomLeft = 2,BottomRight = 3,}
    }
}
并使用以下表格
Balloon.NET.BalloonWindow ms = new Balloon.NET.BalloonWindow();
private void numberEdit1_TextChanged(object sender,EventArgs e)
{
    if (!ms.Visible)
    {
        ms.ShowBalloon(numberEdit1);
        numberEdit1.Focus();
    }
}
    ,        我找到了解决方案:创建一个不会引起关注的表单。