2012-03-28 3 views
0

Я пытаюсь выяснить, является ли элемент управления окнами видимым для пользователя или препятствует его просмотру другим элементом управления или формой (вид с вкладками). Я пробовал GetUpdateRect трюк, но он работает только в том случае, если окно сведено к минимуму. Я нашел функцию RectVisible, но я не уверен, как ее использовать из пользовательского элемента управления Windows Forms.Использование RectVisible в Windows Forms Control

Спасибо заранее

ответ

0

Я не уверен, что вы подразумеваете под «работает только, если окно свернуто». Решение с GetUpdateRect работает:

[StructLayout(LayoutKind.Sequential)] 
internal struct RECT 
{ 
    public int Left; 
    public int Top; 
    public int Right; 
    public int Bottom; 
    public int Width { get { return this.Right - this.Left; } } 
    public int Height { get { return this.Bottom - this.Top; } } 
} 

[DllImport("user32.dll")] 
internal static extern bool GetUpdateRect(IntPtr hWnd, ref Rect rect, bool bErase); 

public static bool IsControlVisibleToUser(Control control) 
{ 
    control.Invalidate(); 
    var bounds = control.Bounds; 
    var rect = new Rect {Left=bounds.Left, Right = bounds.Right, Top = bounds.Top, Bottom = bounds.Bottom}; 
    return GetUpdateRect(control.Handle, ref rect, false); 
} 
+0

У меня есть два пользовательских элемента управления, размещенных на разных страницах вкладок элемента управления табулятора. Когда я тестирую их с помощью вашего кода, они оба видны, хотя есть только одна активная вкладка за раз – unclepaul84

+0

@ unclepaul84 Я не могу дублировать ваш сбой. Вы вызываете Is ... Видимо дважды - один раз для каждой переменной управления пользователя? Когда вы это называете? –

+0

Я вызываю его из потока таймера каждые 10 секунд, используя control.Invoke – unclepaul84

Смежные вопросы