2011-06-13 46 views
1

我想爲我的多行文本框實現智能感知功能。智能感應控件置於沒有控制框的標準形式(所以,沒有標題或最大化/最小化bottons是可見的)。沒有焦點/激活的表單

所有工作正常,但如果顯示的智能感知形式和用戶點擊進入智能感知形式,主要形式失去焦點(因此,用戶必須重新點擊文本框寫入)。

我知道ShowWithoutActivation屬性,但它僅適用於激活,而不是「標準的重點」。

編輯:

我發現http://www.daniweb.com/software-development/csharp/threads/273724的幫助,但所提出的代碼不能正常工作。它在「Show()」方法中拋出「Invalid parameter」異常。

+0

爲什麼你不使用控件而不是表單來處理intellisense? – Saleh 2011-06-13 10:16:56

+0

因爲客戶想要智能感知形式可以從主窗體溢出。 – TcKs 2011-06-13 10:19:40

+0

顯然你的'智能感知控制'不是一個控件。很不可思議的是它究竟是一種什麼樣的動物。如果它是一個Form,那麼將其TopLevel屬性設置爲false以將其轉換爲控件。 – 2011-06-13 12:31:15

回答

1

我有一個代碼,唸叨着我從代碼項目(我認爲)下載,我不什麼是原來的下載鏈接嘗試使用此

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

它看起來有用,我就試試吧。謝謝! – TcKs 2011-06-13 20:05:43

9

要顯示未激活的表單,請覆蓋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; 
    } 
} 
+0

擴展風格是int,所以這並不編譯上最近的.NET版本,最後一個關於調整CreateParams的建議,即使修改爲編譯,也不起作用,你只需要「創建窗口句柄的錯誤」Win32Exception – user3690202 2016-07-25 03:40:16

相關問題