2019年4月25日木曜日

VB リンクラベルを貼ろうか

メッセージボックスから、
リンクを表示して、ブラウザにアクセスさせたい。
でも、簡単には行きません。
別の Form や Window を書いて仕舞った方が早い様で ... 。


最近、とあるプログラムのフロントエンドを書いていました。
はい。
CUI の もの なので、ファイルを扱う そのもの は、
どうしても、長い(パス)名称のファイルが出て来ると、
タイプミスに翻弄されたりもします。
ひと昔なら、これしか無かったのですが、
GUI に慣れて仕舞った身としては、しんどい! ですねぇ。

で、使うかどうか分からない(利用頻度の低そうな)CUI のプログラムに対して、
GUI の フロントエンドを書いて置こう!、と言う次第です。

ある程度、書き進めて、気付くのは、
将来、環境を変えた時に、フロントエンドである事を忘れて実行すれば、
エラーに見舞われる!、と言う予測です。
バックエンドが存在してこそのフロントエンドな訳で。
ちゃんと、バックエンドとなる そのプログラム が導入されていれば、
そんなエラーとご対面になる筈も無いのですが、
将来の自分は ... 分かりませんよね。  何を仕出かす か?。

そこで、メッセージボックスを設置し様としたのですが、
どうせ、表示させるなら、
インストールやダウンロードを誘導するべく、
そのサイトの URL を埋め込み、リンクへジャンプする方が親切ですね。
最悪、元ファイル紛失時に再度入手の可能性だってある筈です。
リンク切れの心配は、別にして、ですが ... 。
勿論、そのサイトからダウンロードしたファイルは保存してある訳ですが、
かと言え、それを自前のプログラムに添付するのは、
避けた方が良さそうですし ... 。  個人利用なら、まだしも ... 、です。.


其処で、直面するのが、メッセージボックスにリンク表示! です。
既成のソフトで しばしば 見掛ける そのスタイル は ... 簡単では無かった ... 。

別に、Form や Window を用意し、其処にリンクを LinkLabel 等を置くのが簡単です。
忘れそうなので、此処に、書き残しましょう。


Form の例で行きます。

Form を新たに追加し、 PictureBox 1つ LinkLabel 1つ Label 2つ Button 1つ を配置します。

コード部分はこれです。  Visual Studio 2017  VB.net
Public Class Form3
    Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Text = "<App Title>   Error!"
        Me.Label1.Text = "This is Message ..." & vbCrLf &
                         "More ..."

        Me.PictureBox1.SizeMode = PictureBoxSizeMode.Normal
        Me.PictureBox1.Image = SystemIcons.Error.ToBitmap()
       
        Me.LinkLabel1.Text = "Show Text For Linked URL"
        Me.Label2.Text = ""
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Close()
    End Sub

    Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        Me.LinkLabel1.LinkVisited = True
        Process.Start("http://www.example.com/")
        'http://www.example.com/
        'Example Domain
        '  This domain Is established to be used for illustrative examples in documents.
        '  You may use this domain in examples without prior coordination Or asking for permission.
        '       refer to  ietf rfc2606     https://tools.ietf.org/html/rfc2606

        Me.Label2.Text = "Opened The Site by Web Browser."
    End Sub
End Class


はい。

此処では、エラーとして表示させるので、 その旨の指定になっています。
もし、情報表示やコンタクト用にする場合は、適宜、変更して下さい。

SystemIcons には、
Application / Asterisk / Error / Exclamation / Hand / Information / Question / Shield / Warning / WinLogo
がありますね。   内容的には重複や変更がある様ですが ... 。


LinkLabel は単なる Label で URL の情報を持っている訳では無いのですね。
LinkLabel の イベントハンドラ がそれを処理します。  その中で初めて URL が登場します。
  .html の書き方、
   <a href="http://www.example.com/">Show Text For Linked URL</a>
  とは違います。.
此処では、ブラウザを指定せず、OS に既定アプリを探させています。
尚、 http://www.example.com/ は架空の URL で、例示用説明用に用意されたものです。
   実際にアクセスが可能な URL となります。
   詳細に関しては https://tools.ietf.org/html/rfc2606 をご覧下さい。

LinkLabel がクリックされると、Label2 に文字を表示しています。  図 はその前の状態です。.



0 件のコメント:

コメントを投稿