none
關於VB6 Label的backstyle 屬性 轉到.NET時...? RRS feed

  • 問題

  • 又遇到問題了~

    查一下資料...感覺答案似乎很不理想(無解....

    我使用這屬性,主要是用來達成重疊顯示用

    僅管上方LABEL物件有顯示東西,仍然很清楚可以看到下方的資料

    原來有圖可看...因我帳戶沒驗證= =! sor

    說明一下物件的顯示效果

    主要是2各label物件,當放製的位置而導致2各物件有部分重疊時

    能達到重疊顯示的效果,不會因為上方label物件的大小就遮蔽住下方的label物件,導致顯示資料部份被切除了

    下方資料其實是很多筆的產品測試結果值...

    那上方的LABEL是顯示測試的結果 PASS 或FAIL的

    所以即使顯示了PASS或FAIL..仍然可以很清楚看到下方的測試值

    所以請問一下...是否有什麼的方式可達到這種重疊顯示效果呢?

    麻煩各位了~

    我查的微軟msdn資料

    連結:http://msdn.microsoft.com/zh-tw/library/cc438259(v=vs.71).aspx


    沒有對等用法。如需詳細資訊,請參閱 Visual Basic .NET 中的 BackStyle 屬性 (Property) 變更。

    2013年5月13日 上午 08:32

解答

所有回覆

  • 嘗試設置BackColor=Transparent(透明色)看看呢?

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年5月13日 上午 09:09
  • TO ProgrammingVolunteer

    我有試驗過這方法~

    不過沒達到我要的效果

    而且這個Transparent 歸納的顏色區在 WEB..這沒什麼問題吧?

    我一方面是在想...是不是還有什麼屬性沒設置到呢?

    2013年5月13日 上午 09:29
  • 您可參考 Color.FromArgb 方法 (Int32, Int32, Int32, Int32)http://msdn.microsoft.com/zh-tw/library/at1k42eh(v=vs.80).aspx


    • 已編輯 Mark Shu 2013年5月13日 上午 09:38
    2013年5月13日 上午 09:37
  • TO:Mark Shu

    我剛好正在試驗這個東西

    我原本看VB.NET它色碼是 A R G B的結構

    我想說..那A不就代表透名度嗎...

    結果...還是穿不透...

    A值越低..只是顏色越淡..直到"白"...

    還是感謝你~

    2013年5月13日 上午 09:54
  • 既有討論:

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=Label%20%e9%80%8f%e6%98%8e%20232

    你下面的東西只有 backImage 在 VBNET 才會透上來,其他要自建控制項。

    • 已標示為解答 魚骨頭 2013年5月14日 上午 01:11
    • 已取消標示為解答 魚骨頭 2013年5月14日 上午 10:10
    • 已標示為解答 魚骨頭 2013年5月16日 上午 05:12
    2013年5月13日 下午 03:07
  • 感謝 心冷熱情熄 提供的 連結..

    在看連結裡面的資料後,加上自己測試的結果

    發覺這個 Transparent 設置上很挑它底下的物件....

    我用Picturebox 當底時,上面的Label就是無法透明

    看完連結的眾多文章後,嘗試使用Panel物件當底....馬上就好了

    雖然對於2各LABEL重疊顯示的效果還是不形,不過單各LABEL 不重疊就很OK


    其中有一篇文章中, Bill Chung寫到一種方法

    在Panel物件的 Paint 事件直接加上如下程式碼

    e.Graphics.DrawString("Test", New Font("Arial", 12), Brushes.Brown, 20, 20)


    這種直接在物件裡面,很像VB6的PRINT印出訊息的這種方法,我簡單測試後,效果很滿意,

    應該算是解決我的問題了~^^

    感謝大家指教


    發完文章後...實際用了一下...我又不知怎辦了

    請教我一下怎麼把 Paint 事件裡的程式碼 弄成一個小程式,我要用時,直接呼叫..

    例似

    Public Sub yy()       

      e.Graphics.DrawString("Test", New Font("Arial", 12), Brushes.Brown, 20, 20)
       

    End sub

    我要用時,直接呼叫副程式 yy 即可

    麻煩大家了..謝謝~

    • 已編輯 魚骨頭 2013年5月14日 上午 01:40
    2013年5月14日 上午 01:10
  • 這個要用到委派事件

    你可以試著參考這篇文章

    [痞客幫] 委派其實很簡單

    還有Bill前輩的委派演義1~5

    委派演義(1)

    2013年5月14日 上午 03:38
  • 應該是少傳了參數吧?

        Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
    
            yy(e)
    
        End Sub
    
        Public Sub yy(ByVal e As System.Windows.Forms.PaintEventArgs)
    
            e.Graphics.DrawString("Test", New Font("Arial", 12), Brushes.Brown, 20, 20)
    
        End Sub



    Ader

    =====

    補充:傳 Graphics 比傳 PaintEventArgs 較有彈性:

        Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
    
            yy(e.Graphics)
    
        End Sub
    
        Public Sub yy(ByVal g As Graphics)
    
            g.DrawString("Test", New Font("Arial", 12), Brushes.Brown, 20, 20)
    
        End Sub
    


    • 已編輯 Ader.Chen 2013年5月14日 上午 07:27 補充
    2013年5月14日 上午 07:08
  • 感謝 GISK 與 Ader.Chen 提供的資料

    老實講~早上看到GISK 為我指點方向~瞬間戰鬥力上升了

    但真的去看資料....確又是有看沒有懂...= =..整各戰鬥力瞬間降到最低....

    而且那資料還是Bill前輩有叫我去看的(我是有看完第一章了,)

    ~但當GISK指引我看1-5時,

    整個又傻了~

    我用看的看得懂...但...我寫不出來...

    無從思考起,也不知第一步怎麼走

    亂試..雖然自己知道99%試不出來....

    因為無法思考

    所以只好看一下資料...再依樣畫出我想要的葫蘆,

    而且連為什麼要這樣寫,我也不知道,

    就KEYIN完程式碼的當下若沒出現錯誤就自認為這樣打應該可以,

    所以說...結果當然是失敗

    看到Ader.Chen有幫我寫了直接可用的程式

    很高興,可以用....

    但是當我要把它拿到Button物件裡使用時

    確又不行了

    我想問題應該是Panel 與Button物件對於 e 的定義不同吧

    ByVal e As System.Windows.Forms.PaintEventArgs ==>Panel

    ByVal e As System.EventArgs                               ==>Button

    以至於

      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
           

      yy(e.Graphics)    '<== 出錯  Graphics這不是  System.EventArgs的成員?

       End Sub

    可以幫我解釋一下那個錯誤訊息的意思嗎?

    我不懂它的意思,也不知怎麼改良..才能不出現這訊息...

    另外,再問一下sender 與 e 二個變數,是不是有什麼特殊的意義或是用法嗎?

    我有把它們2個變數名稱亂改,好像也能執行沒出什麼問題

    而且這東西vb6時沒看過...

    Private Sub Command1_Click()     <== vb6只有這樣

    Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   <==  .net的

    是否有這宣告的語法說明資料呢?

    一各請求,能否請GISK 前輩 順便幫我用委派的方式寫一下我想要的程式 讓我看一下

                 也請 Ader.Chen 前輩在幫我修改一下你提供的程式

                 希望2位還有來看

     

    也請大家再為我解惑了

    真的很抱歉一直麻煩大家....

    2013年5月14日 上午 08:47
  • 我再找時間試著整理我所理解的委派

    我會儘量用白話方式讓你明白我所知道的

    另外我也只比你多摸了8個月的.NET,所以有可能會出現錯誤

    如果不小心我誤導你了請你見諒

    還需要各位前輩們的指正


    整理可能需要點時間,在我整理好前如果有前輩能點通你的話我就不獻醜了^_^

    補充:

    sender指的是觸發這個事件的物件,如果是Button觸發,那sender所代表的就是Button
    這樣你會有一個疑問,你使用   sender.  <--找不到Text屬性可以更改Button文字
    這是因為sender目前型態是Object,你將他用Ctype(sender,Button)  轉型後就可以找到Text屬性了
    Ctype(sender,Button).   <--可以找到Text屬性

    e 指的是存取事件的變數,你注意到Button與Panel所使用的事件不同了
    那你仔細看使用事件的英文
    System.Windows.Forms.PaintEventArgs
    這有牽扯到繪畫空間
    基本上我的認知,容器物件才有繪畫空間 (如:Form、Panel)
    你可以將控制項放到裡面,那個裝載控制項的就是容器,在工具箱你可以找到有個容器分類的控制項物件集合
    其他控制項能否實作繪圖我就不清楚了,要請前輩們解說

    • 已編輯 GISK 2013年5月14日 上午 09:56 新增補充
    2013年5月14日 上午 09:21
  • 初學者容易困惑的一件事: 事件和事件委派函式是兩碼子的事.

    事件代表發生了什麼事情, 比方發生了 Button 的 Click 事件, 表示有某個 Button 被 Click

    事件委派函式則是在事件發生後, 我們要讓它執行哪一部份的程式碼.

    為什麼某些事件的委派函式參數定義是不一樣的 ? 這要從怎麼宣告事件看起.

    我在以下這篇文有解釋

    委派演義(4) -- 委派與事件(一)

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年5月14日 下午 02:25
    版主
  •     '請問為什麼要在 Button1.Click 中呼叫該 Sub?
        '個人覺得甚至不需要把 DrawString 搬出 Panel.Paint 事件, 另做一個 Sub.
        'Panel.Paint 事件會【自動引發】重繪, 為什麼想在 Button1.Click 再做一次?

        'Graphics' 不是 'System.EventArgs' 的成員。說的很明白啊, Button.Click 事件中的 EventArgs 物件並沒有 PaintEventArgs 物件的 Graphics 成員.
        '就算是 Button1.Paint 事件中的 PaintEventArgs 物件, 兩者不同 Sender 也不會是您想要的結果.

        '建議您找時間到書店翻翻 Visual Basic 2005(或以上)的入門書(大部分寫的都比 MSDN 上容易懂),
        '因為常用的事件函式、物件成員若不搞清楚可能一直停留在 Try & Error 寸步難行.

        '您也可以在此論壇搜尋 物件 事件 sender, 多看一些有益無害:
        http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=%E7%89%A9%E4%BB%B6%20%E4%BA%8B%E4%BB%B6%20sender&ac=5


    Ader


    • 已編輯 Ader.Chen 2013年5月14日 下午 03:23 修正超連結
    2013年5月14日 下午 03:21
  • 這篇在談的 TransparentLabel 自建控制項看過嗎?

    http://social.msdn.microsoft.com/Forums/en-US/232/thread/19e41da3-5aed-49f1-9dc7-d5114b75a213

    直接在論壇搜尋 TransparentLabel 可以看到各國各自建控制項的討論。

    2013年5月14日 下午 03:38
  • 如果是要想按 Button1 更改顯示文字的話, 參考:

        Dim strData As String = "要顯示的文字"
    
        Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
    
            e.Graphics.DrawString(strData, New Font("Arial", 12), Brushes.Brown, 20, 20)
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            strData = "第一行" & vbCrLf & "第二行" & vbCrLf & "第三行"
            Panel1.Invalidate()
    
        End Sub
    


    Ader

    2013年5月14日 下午 03:54
  • !上一封我打的...怎結果變  MigrationUser 1

    這是誰?

    出了什麼BUG嗎?

    BY:魚骨頭

    2013年5月15日 上午 02:22
  • 我用Bill前輩的  委派演義(一) 做了實際程式碼

    你先參考一下

    Public Class Form1
        Public Delegate Sub DrawStr() ' 宣告一個沒有回傳值的委派型別
        Public a As DrawStr           ' 用變數存取此委派型別 (可以執行自己,因為型別有宣告自己是個Sub)
        Dim PrintStr As String = ""   ' 要印出的字串
        Private Sub Form1_Load_1(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            a = AddressOf Panel1.Refresh    ' 設定委派,當a被執行時就啟動Panel1.Refresh事件 (當然也可以改成你要的方法)
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            yy()
        End Sub
    
        Private Sub yy()
            PrintStr = "Test"       ' 更改字串文字
            a()                     ' 執行委派
        End Sub
    
        Private Sub Panel1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
            ' 注意Panel被產生時會重繪一次,若有設定字串文字就會被先印出
            e.Graphics.DrawString(PrintStr, New Font("Arial", 12), Brushes.Brown, 20, 20)
        End Sub
    End Class

    註解的說明若有錯誤的地方,請前輩們趕快用力鞭

    不然我就會不小心誤導人了>"<



    • 已編輯 GISK 2013年5月15日 上午 06:11 又錯字
    2013年5月15日 上午 06:09
  • 感謝 GISK 前輩的再次撥空指導

    我把 GISK 的範例跟Ader.Chen前輩的範例對照一下

    看懂了

    Ader.Chen的範例是因為設定完字串值,直接使用Panel1.Invalidate()方法

    而觸發了Panel1.Paint 事件,產生需要的結果

    而 GISK 提供的這種委派方式,因為 a = AddressOf Panel1.Refresh   

    所以當執行a()時就等於執行了Panel1.Refresh   這方法

    而這方法就觸發了 Panel1.Paint 事件

    這樣的理解應該對了吧?^^?

    另外,再問一下

    Public Delegate Sub DrawStr() ' 宣告一個沒有回傳值的委派型別
    Public a As DrawStr 

    這2行的 DrawStr,我試驗了一下,似乎只要2個名稱相同就ok了,沒必要一定是DrawStr

    到這部分,我似乎發現我對.net不知所措的主因是什麼了

    就是那個As 後面的名字

    我把它一直理解成像vb6那種變數宣告方式,

    話說...GISK前輩的範例真的很簡單易懂

    我又去網路翻別人對委派的解釋...看的又頭痛了..>"<

    GISK....謝謝你囉~

            

     

    • 已編輯 魚骨頭 2013年5月15日 上午 08:58 修改排版與錯字
    2013年5月15日 上午 08:56
  • 用 Paint 事件 容易經常性觸發,所以用控制項比較簡單。

    控制項內還是會使用 Paint 事件,但是控制項的範圍通常比父容器小,所以會減少滑鼠或其他視窗覆蓋造成 Paint 事件觸發。

    所以 透空控制項通常是使用 Region 來處理,例如:

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=FillRegion%20Transparent

    2013年5月15日 下午 12:26
  • 要做透明色的話,先去把 Charles Petzold 一本 Visual Basic NET 翻譯書看一遍,所有基本繪圖能玩的,那本都有範例。

    Petzold, Microsoft Windows 程式設計-使用Visual Basic .Net

    http://www.microsoft.com/mspress/taiwan/books/book20758.htm

    2013年5月15日 下午 12:35
  • [原創]Callback與Delegate原理

    也許這篇你會好懂些?

    我在找文章時有看到這句話

    委派 是來 儲存 方法的位址  的 資料型別

    對照上面的程式碼,你可以看到它真的就只有用來記錄當委派要執行時該去哪裡做事情

    另外我那篇程式碼只是硬要用委派方式達成你的功能

    其實Ader.Chen 前輩的方法更直觀

    因為當你更改文字時就可以叫Panel重繪了,不需要再經過委派這個步驟

    重繪時變數里的字串已更改,自然就可以印出你想要的文字

    也由於我用很簡單的方式給你,所以有些較深層的東西你還需要慢慢去探索

    趕快把Bill前輩的委派演義看完,即使看不懂但心裡已經有個底

    之後遇到了再回去看幾次忽然間就會明白了


    雖然我也還沒看完...(遮臉)

    補充:

    這裡有篇 BS 的前輩所寫的委派程式碼,你可以看看

    委派的用途及概念?

    BS=BlueShop=藍色小舖,是另一個.NET高手聚集的論壇,有需要時也可以去那兒看看

    • 已編輯 GISK 2013年5月16日 上午 12:46 新增補充
    2013年5月16日 上午 12:40
  • 感謝 GISK 還有熱心的各位

    這篇文章就結案囉...

    很感謝大家一直找文章給我看,

    雖然有的我有GOOGLE先看過了,

    但..還是有看沒有懂,哈~

    我知道委派這東西很有學問的(因為很多文章寫的委派樣式完全差很大...

    所以很感謝GISK還特別弄個超陽春委派給我...

    讓我終於有了一點看得懂的成就感

    後來我又去對照一下Bill Chung 前輩的委派文章(張無忌那個...)

    感覺就超像阿...但當時就是看不懂

    總之,很感謝大家的幫忙

    不用再找資料給我看了

    一方面我有點消耗不完...很不好意思一直讓各位這麼費心

    那下一個問題...再請大家多指教囉....^^

    2013年5月16日 上午 05:35