• VB.NET设置控件和窗体的显示级别


    前言:在用VB.NET开发射频检测系统ADS时,当激活已存在的目标MDI子窗体时,被其他子窗体遮住了,导致目标MDI子窗体不能显示。

    这个问题怎么解决呢?网上看到一篇帖子VB.NET设置控件和窗体的显示级别,总结得挺不错的。现转载过来,以备后用。

    解决方案

    1)使用Controls属性将子窗体作为子控件显示到Panel等的所有子控件最前方

    有些控件可以作为容器使用如类似Panel、PictureBox等的控件,在向容器控件中加入其它控件时,这些子控件组合到一起成为一个控件集合,在这个控件集合中每个控件都有各自显示的顺序。下面我们拿Panel来举例(其它容器控件的方法相同)。

    为了显示到Panel前我们可以使用Controls属性,将子窗体作为Panel的子控件显示。具体实现代码如下:

    Private Sub frmQryBalance_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.TopLevel = False
            frmMain.Panel1.Controls.Add(Me)
            frmMain.Panel1.Controls.SetChildIndex(Me, 0)
            frmMain.Show()
    End Sub

    上面的Add方法将frmQryBalance窗体作为子控件显示到了Panel中,SetChildIndex方法是设置子窗体的显示顺序,0是将该窗体显示到所有子控件最前方。

    2)使用Parent属性将子窗体作为子控件显示到Panel等的所有子控件最前方

    代码如下:

    Private Sub frmQryBalance_Load(sender As Object, e As EventArgs) Handles MyBase.Load
         Me.MdiParent = frmMain
         Me.Parent = frmMain.Panel1
         Me.BringToFront()
         Me.Show()
    End Sub

    BringToFront是将控件移到 Z 顺序的前面。BringToFront 不会使一个控件成为顶级控件。

    与BringToFront方法相反的一个方法名为SendToBack方法。将控件移到 Z 顺序的后面。如果控件为顶级控件,除非该控件为活动状态,否则此方法将无法正确运行。 顶级控件是类似 Form 的控件,它不是另一个控件的子控件。 活动控件是具有输入焦点的可见控件。 若要对非活动的顶级控件使用 SendToBack 方法,首先要对该控件调用 BringToFront 方法。

    3)调用API方法SetParent

     在Visual Basic .Net中使用“平台调用”服务,申明Windows API函数主要有二种具体的实现方法:①使用DllImport特征类来申明Windows API函数。②使用“Declare”语句来申明Windows API函数。这两种方法虽有异曲同工之效,但在繁简上却有很大差异,第一种方法申明过程比较复杂,很容易在申明Windows API函数时出错,所以并不提倡。而第二种方法相对简单,并且又保留了以前Visual Basic中的很多语法,所以大都使用这种方法来申明Windows API函数。

    具体实现方法如下:

    Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
    Private Sub frmQryBalance_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        setparent  me frmMain.Panel1
    End Sub

    参考链接:http://blog.csdn.net/zhang_xinxiu/article/details/8888510

  • 相关阅读:
    luogu3810 【模板】三维偏序(陌上花开)
    POJ 1704 Georgia and Bob(阶梯博弈)
    URAL 1004 Sightseeing Trip(floyd求最小环+路径输出)
    BZOJ 1064: [Noi2008]假面舞会(dfs + 图论好题!)
    Codeforces Round #332 (Div. 2) D. Spongebob and Squares(枚举)
    HDU 4313 Matrix(并查集)
    HDU 4312 Meeting point-2(切比雪夫距离转曼哈顿距离)
    HDU 4311 Meeting point-1(曼哈顿距离最小)
    HDU 4309 Seikimatsu Occult Tonneru(最大流+二进制枚举)
    HDU 4303 Hourai Jeweled(树形DP)
  • 原文地址:https://www.cnblogs.com/Scl891004X/p/6252244.html
Copyright © 2020-2023  润新知