|
■No99265 (エックス さん) に返信 > VB.NETを使ってメッセージボックスを表示したいのですが、 > 規定のMessageboxでは表示できるアイコンが限られているため、 > 自作したいと考えています。
MessageBox の情報は、 Ctrl+C を使ってクリップボードに取り込むことができます。
長いメッセージの記録などに便利なので、自分が作る場合はそれを真似て、 クリップボードにコピーする機能も実装するようにしています。 (リサイズ可能なフォームと、スクロール可能な ReadOnly TextBox を利用することもあります)
> Labelのも文字数や文字サイズに応じて、 > Labelのサイズだけでなく、フォームのサイズも調整したいのですが、 > どのようにすれば良いですか?
そもそも、サイズをどのように定義したいのでしょうか?
「フォームの横幅を固定し、長い文字列を折り返した上で、フォームの高さを調整」なのか、 「自動折り返しはしない。複数行なら改行コードを含む文字列を明示的に渡す」とか、 「長い文字列はフォントサイズを下げて縮小表示」などなど、 自動調整といっても、いろいろなパターンがあるかと思います。
とりあえず、Label の AutoSize に任せてみる手抜き実装案。 アイコンやタイトルバー、閉じるボタンなどの制御は省略しています。
'CustomMeessageBox.vb ' フォーム.Padding = 5,5,5,5 ' Label1.AutoEllipsis = False ' Label1.AutoSize = True ' Label1.Dock = Fill ' Label1.UseMnemonic = False
Public Class CustomMeessageBox Private Sub New() InitializeComponent() End Sub
Public Shared Function ShowMessage(msg As String) As DialogResult Return ShowMessage(Nothing, msg) End Function
Public Shared Function ShowMessage(owner As IWin32Window, msg As String) As DialogResult Using dlg As New CustomMeessageBox() dlg.Label1.Text = msg dlg.ClientSize = Drawing.Size.Add(dlg.Label1.Size, New Drawing.Size(10, 10)) Return dlg.ShowDialog(owner) End Using End Function End Class
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click CustomMeessageBox.ShowMessage(Me, TextBox1.Text) End Sub End Class
|