2012-03-28 13 views
0

私は、Windowsフォームコントロールがユーザーに表示されているか、別のコントロールまたはフォーム(タブ付きビュー)によって表示から遮られているかどうかを調べようとしています。 GetUpdateRectトリックを試みましたが、ウィンドウが最小化されている場合にのみ機能します。 RectVisible関数が見つかりましたが、Windowsフォームのユーザーコントロールから使用する方法がわかりません。私はあなたが「ウィンドウが最小化されている場合にのみ機能します」によって何を意味するかわからないんだけど、アドバンスWindowsフォームコントロールでRectVisibleを使用する

答えて

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

タブコントロールの異なるタブページでホストされる2つのユーザーコントロールがあります。あなたのコードを使ってそれらをテストすると、一度にアクティブなタブが1つしかありませんが、両方とも表示されます。 – unclepaul84

+0

@ unclepaul84私はあなたの失敗を複製できません。あなたはIs ... Visibleを2回呼びます - それぞれのユーザーコントロール変数に対して1回ですか?いつ呼びますか? –

+0

control.Invokeを使用して10秒ごとにタイマースレッドから呼び出しています – unclepaul84

関連する問題