在C# Winforms中,当使用Trackbar控件时,有没有一种方法可以不显示虚线焦点轮廓边框?
详情:这个轮廓对我来说看起来有点俗气,所以我只想为了美观不显示它。
谢谢,
亚当
详情:这个轮廓对我来说看起来有点俗气,所以我只想为了美观不显示它。
谢谢,
亚当
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 的文档以了解其工作原理(基本上发送一条消息来关闭轨迹条上的愚蠢东西以获取焦点)。
我知道这是一个老问题,但如果有人感兴趣,这会更简单:
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);
}
}
private void trackBar1_MouseLeave(object sender, EventArgs e)
{
button2.Select();
}
虽然很老,但我用可见性设置为false创建了一个按钮,并在离开滑动条区域时选择了它。
SendMessage(handle, WM_UPDATEUISTATE, MAKEWPARAM(UIS_SET, UISF_HIDEFOCUS), 0)
。 - Josh Kelleyprocedure TdmlTrackBar.WM_SETFOCUS(var Message: TWMSetFocus); begin inherited; SendMessage(Handle, $128, 1 shl 16 + 1, 0); end;
- Jaap Versteegh