Форма без фокуса / активации - PullRequest
1 голос
/ 13 июня 2011

Я хочу реализовать функцию, подобную intellisense, для моего многострочного текстового поля. Элемент управления intellisense помещается в стандартную форму без блока управления (поэтому заголовки или максимизируемые / минимизируемые поля не видны).

Все работает нормально, но если показывается intellisense-форма и пользователь нажимает на форму intellisense, основная форма теряет фокус (поэтому пользователь должен щелкнуть обратно в текстовое поле для записи).

Я знаю свойство ShowWithoutActivation, но оно работает только при активации, а не при «стандартном фокусе».

EDIT:

Я нашел справку по http://www.daniweb.com/software-development/csharp/threads/273724, но представленный код не работает. Выдает исключение «Неверный параметр» во время метода «Show ()».

Ответы [ 3 ]

9 голосов
/ 26 мая 2012

Чтобы показать форму без активации, переопределите свойство 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;
  }
}
1 голос
/ 13 июня 2011

у меня когда-нибудь есть код, который я скачал из проекта кода (я думаю), и я не знаю, какова исходная ссылка для загрузки, попробуйте использовать эту

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();
    }
}
0 голосов
/ 13 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...