Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0365: Inputbox

 von 

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Fenster

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Inputbox, Form, Fenster, Textbox

Der Vorschlag wurde erstellt am: 29.04.2009 14:20.
Die letzte Aktualisierung erfolgte am 29.04.2009 16:43.

Zurück zur Übersicht

Beschreibung  

eine Inputbox im Eigenbau

Schwierigkeitsgrad

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [12,36 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' --------- Anfang Projektdatei InputBoxTest.vbproj  ---------
' ------------------ Anfang Datei Form1.vb  ------------------
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles Button1.Click

        Using Frm As New InputBox("Passwort", "Geheim", , , , , 1)

            ' weitere Optionen
            Frm.ToolTipText = "hier ist der ToolTip"

            ' Frm.Text = "Passwort"
            ' Frm.TextInput = "Geheim"
            ' Frm.PasswordChar = "#"c
            ' Frm.NumericOnly = True
            ' Frm.LocationStart = New Point(30, 30)
            ' Frm.OnEnterOk = False
            ' Frm.OnEscapeCancel = False
            ' Frm.MaxLines = 5
            ' Frm.MaxLength = 10
            Frm.ShowDialog(Me)

            If Not Frm.Canceled Then
                MessageBox.Show(Frm.TextInput)

            Else

                MessageBox.Show("Abbruch")
            End If

        End Using

    End Sub

End Class

' ------------------- Ende Datei Form1.vb  -------------------
' ----------------- Anfang Datei InputBox.vb -----------------
' ----------------------------------
'  InputBox    VB2005
'  analog VB6
'
'  Autor       peter.k.sauer@web.de
'  created     28.04.2009
'  update      29.04.2009
' ----------------------------------

''' <summary>
''' eine Box für Texteingabe
''' </summary>
''' <remarks></remarks>
Public Class InputBox

    Inherits Form

    Private WithEvents TBox As New TextBox
    Private Lbl As New Label
    Private TT As New ToolTip
    Private WithEvents btnOk As New Button
    Private WithEvents btnCancel As New Button
    Private m_Canceled As Boolean = True
    Private m_SaveOnEnter As Boolean = True
    Private m_OnEscapeCancel As Boolean = True
    Private m_NumericOnly As Boolean = False
    Private m_ToolTipText As String
    Private m_LocationStart As Point = New Point(-1, -1)
    Private m_MaxLines As Integer = 1

    ''' <summary>
    ''' maximal Zeilen in der Textbox, default 1
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property MaxLines() As Integer
        Get
            Return m_MaxLines

        End Get

        Set(ByVal value As Integer)
            m_MaxLines = value

            If m_MaxLines = 1 Then
                TBox.Multiline = False
                Me.Height = 100
                btnOk.Top = 40
                btnCancel.Top = 40

            Else

                TBox.Multiline = True

                Dim zh As Single = Windows.Forms.TextRenderer.MeasureText("x", TBox.Font).Height

                zh = zh * Convert.ToSingle(MaxLines - 1)

                Dim H As Integer = Convert.ToInt32(zh)

                TBox.Multiline = True
                TBox.Height += H
                Me.Height += H
                btnOk.Top += H
                btnCancel.Top += H
            End If

        End Set

    End Property

    ''' <summary>
    ''' maximal Anzahl Zeichen in der Textbox, default 32767
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property MaxLength() As Integer
        Get
            Return TBox.MaxLength

        End Get

        Set(ByVal value As Integer)
            TBox.MaxLength = value

        End Set

    End Property

    ''' <summary>
    ''' ruft ab oder legt fest ob Escape in der Textbox
    ''' als Abbruch gewertet wird
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property OnEscapeCancel() As Boolean
        Get
            Return m_OnEscapeCancel

        End Get

        Set(ByVal value As Boolean)
            m_OnEscapeCancel = value

        End Set

    End Property

    ''' <summary>
    ''' ruft ab oder legt fest ob ein Enter in der Textbox als Ok gilt,
    ''' default = True
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property OnEnterOk() As Boolean
        Get
            Return m_SaveOnEnter

        End Get

        Set(ByVal value As Boolean)
            m_SaveOnEnter = value

        End Set

    End Property

    ''' <summary>
    ''' ruft ab oder legt fest die Location im Verhältnis zur aktiven Form,
    ''' default ist CenterParent
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property LocationStart() As Point
        Get
            Return m_LocationStart

        End Get

        Set(ByVal value As Point)
            m_LocationStart = value

        End Set

    End Property

    ''' <summary>
    ''' ruft ab ob auf Abbruch oder X-Button geclickt wurde
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property Canceled() As Boolean
        Get
            Return m_Canceled

        End Get

    End Property

    ''' <summary>
    ''' ruft ab oder legt fest ausschliesslich numerische Eingabe
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property NumericOnly() As Boolean
        Get
            Return m_NumericOnly

        End Get

        Set(ByVal value As Boolean)
            m_NumericOnly = value

        End Set

    End Property

    ''' <summary>
    ''' vorhandener Text wird bei Inputbox_MouseHover angezeigt
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property ToolTipText() As String
        Get
            Return m_ToolTipText

        End Get

        Set(ByVal value As String)
            m_ToolTipText = value

        End Set

    End Property

    ''' <summary>
    ''' ruft ab oder legt fest die Texteingabe
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property TextInput() As String
        Get
            Return TBox.Text

        End Get

        Set(ByVal value As String)
            TBox.Text = value

        End Set

    End Property

    ''' <summary>
    ''' ruft ab oder legt fest ein Zeichen für Passwordeingabe
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property PasswordChar() As Char
        Get
            Return TBox.PasswordChar

        End Get

        Set(ByVal value As Char)
            TBox.PasswordChar = value

        End Set

    End Property

    ''' <summary>
    ''' eine Box für Texteingabe
    ''' </summary>
    ''' <param name="Caption">Überschrift im Header</param>
    ''' <param name="Text">einzugebender Text</param>
    ''' <param name="mPasswordChar">Zeichen für Passwortverdeckung</param>
    ''' <param name="mNumericOnly">rein numerische Eingabe</param>
    ''' <param name="mOnEnterOk">Enter in Textbox gilt als Ok</param>
    ''' <param name="mOnEscapeCancel">Abbruch bei Escape in der Textbox</param>
    ''' <param name="mMaxLines">Anzahl Zeilen für Texteingabe, Default 1</param>
    ''' <param name="mMaxLength">maximal Anzahl Zeichen in Textbox</param>
    ''' <param name="mToolTipText">ein Tooltiptext</param>
    ''' <remarks></remarks>
    Public Sub New(Optional ByVal Caption As String = "", Optional ByVal Text As String = "", _
                       Optional ByVal mPasswordChar As String = "", _
                       Optional ByVal mNumericOnly As Boolean = False, _
                       Optional ByVal mOnEnterOk As Boolean = True, _
                       Optional ByVal mOnEscapeCancel As Boolean = True, _
                       Optional ByVal mMaxLines As Integer = 1, _
                       Optional ByVal mMaxLength As Integer = 32767, _
                       Optional ByVal mToolTipText As String = "")

        Init()
        Me.Text = Caption
        TBox.Text = Text

        If Not String.IsNullOrEmpty(mPasswordChar) Then
            TBox.PasswordChar = Convert.ToChar(mPasswordChar.Substring(0, 1))
        End If

        NumericOnly = mNumericOnly
        OnEnterOk = mOnEnterOk
        OnEscapeCancel = mOnEscapeCancel
        ToolTipText = mToolTipText

        MaxLines = mMaxLines
        TBox.MaxLength = mMaxLength

    End Sub

    Private Sub Init()

        Lbl.Text = "Text: "
        Lbl.Location = New Point(5, 12)
        TBox.Location = New Point(40, 10)
        TBox.Size = New Size(200, TBox.Height)

        btnOk.Size = New Size(84, 28)
        btnOk.Text = "Ok"
        btnOk.Location = New Point(40, 40)

        btnCancel.Size = New Size(84, 28)
        btnCancel.Text = "Abbruch"
        btnCancel.Location = New Point(156, 40)

        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedToolWindow
        Me.Size = New Size(260, 100)
        Me.StartPosition = FormStartPosition.CenterParent

        Me.Controls.Add(TBox)
        Me.Controls.Add(Lbl)
        Me.Controls.Add(btnOk)
        Me.Controls.Add(btnCancel)

    End Sub

    Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
        btnCancel.Click

        Me.Close()

    End Sub

    Private Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOk.Click

        Call Ok()

    End Sub

    Private Sub Ok()

        If NumericOnly Then

            Dim d As Double = 0

            If Not Double.TryParse(TBox.Text, d) Then

                Dim Titel As String = "numerische Eingabe"

                Dim Msg As String = "'" & TBox.Text & "'" & Environment.NewLine & "ist " & _
                    "kein gültiger numerischer Wert     "

                MessageBox.Show(Msg, Titel, MessageBoxButtons.OK, MessageBoxIcon.Error)

                Exit Sub

            End If
        End If

        m_Canceled = False
        Me.Close()

    End Sub

    Private Sub InputBox_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If LocationStart <> New Point(-1, -1) Then

            Dim Frm As Form = Windows.Forms.Form.ActiveForm
            Dim x As Integer = Frm.Left + LocationStart.X
            Dim y As Integer = Frm.Top + LocationStart.Y

            Me.Location = New Point(x, y)
        End If

    End Sub

    Private Sub InputBox_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles Me.MouseHover

        If Not String.IsNullOrEmpty(ToolTipText) Then
            TT.Show(ToolTipText, Me)
        End If

    End Sub

    Private Sub TBox_KeyPress(ByVal sender As Object, ByVal e As _
        System.Windows.Forms.KeyPressEventArgs) Handles TBox.KeyPress

        Dim NFI As System.Globalization.NumberFormatInfo = _
            System.Globalization.CultureInfo.CurrentCulture.NumberFormat

        Dim DS As Char = Convert.ToChar(NFI.NumberDecimalSeparator)

        If (e.KeyChar = Convert.ToChar(13)) AndAlso OnEnterOk Then

            Call Ok()

            Exit Sub

        ElseIf (e.KeyChar = Convert.ToChar(27)) AndAlso OnEscapeCancel Then

            Me.Close()

            Exit Sub

        End If

        If NumericOnly Then

            Select Case e.KeyChar

                Case "0"c To "9"c
                Case "-"c

                    If TBox.Text.IndexOf("-"c) >= 0 Then
                        e.Handled = True
                    End If

                Case Convert.ToChar(8)
                Case DS

                    If TBox.Text.IndexOf(DS) >= 0 Then
                        e.Handled = True
                    End If

                Case Else
                    e.Handled = True

            End Select

        End If

    End Sub

End Class

' ------------------ Ende Datei InputBox.vb ------------------
' ---------- Ende Projektdatei InputBoxTest.vbproj  ----------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits

Inputbox - Dario 15.05.2009 18:33

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.