2009-09-27 35 views
3

在C#中的WinForms遮蓋力虛線周圍的TrackBar控制大綱,有沒有辦法不顯示虛線的焦點外框,顯示周圍的TrackBar控制正在使用的時候嗎?選擇時

詳細說明:本大綱看起來有點俗氣給我,所以我只是拍攝的美學沒有表現出來。

感謝,

亞當

回答

15

ShowFocusCues並沒有爲我工作,但這並:

internal class NoFocusTrackBar : System.Windows.Forms.TrackBar 
    { 
     [System.Runtime.InteropServices.DllImport("user32.dll")] 
     public extern static int SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam); 

     private static int MakeParam(int loWord, int hiWord) 
     { 
     return (hiWord << 16) | (loWord & 0xffff); 
     } 

     protected override void OnGotFocus(EventArgs e) 
     { 
     base.OnGotFocus(e); 
     SendMessage(this.Handle, 0x0128, MakeParam(1, 0x1), 0); 
     } 
    } 
瞭解它是如何工作的(基本上發送消息,來打開WM_UPDATEUISTATE

查看文檔愚蠢的事情脫離軌跡欄得到焦點)。

+0

感謝這一個一百萬。我到處尋找這個答案。在我的情況下,這與分類的TabControl一起工作。 – 2012-02-21 02:31:52

+1

任何有興趣在翻譯該代碼爲其他語言時,C當量將是'的SendMessage(手柄,WM_UPDATEUISTATE,MAKEWPARAM(UIS_SET,UISF_HIDEFOCUS),0)'。 '過程TdmlTrackBar.WM_SETFOCUS(VAR消息::TWMSetFocus)像在Delphi一個魅力 – 2015-03-24 17:59:07

+0

尼斯:)工作; 開始 繼承; SendMessage(Handle,$ 128,1 shl 16 + 1,0); end;' – 2016-04-15 14:05:49

0

我知道這是一個老問題,但是這是簡單的,如果有人有興趣:

public class TrackBarWithoutFocus : TrackBar 
{ 
    private const int WM_SETFOCUS = 0x0007; 

    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_SETFOCUS) 
     { 
      return; 
     } 

     base.WndProc(ref m); 
    } 
} 
+0

這將阻止控件被鍵盤調整,因爲它會阻止它獲得焦點。 – 2015-04-10 10:29:17