Userform textbox dočasně zvětšit, když kliknete na, aby odrážely velikost obsahu, který vstoupil v

0

Otázka

Jak mohu zvětšit textové pole, aby se vešly ve všech obsah, když je někdo psát? V současné době je jen pouze vám umožní vidět obsah, který se vejde do rámečku, nicméně potřebuji, aby to reflexní textu, který byl vložen pro uživatele, aby mohli zkontrolovat a ověřit, že obsah dát do toho. Potřeboval bych řešení, které pouze dočasně zvětší, když textového pole kliknete a pak, když další otázkou je, klikli na to se vrátí do normální velikosti to bylo původně.

Měl jsem na mysli něco, jako níže uvedený kód, ale že neměl fufill všechny nezbytné podmínky:

Private Sub TextBox1_Click()
 TextBox1.Height = TextBox1.LineCount * 10
End Sub
ms-word textbox userform vba
2021-11-19 19:23:58
1

Nejlepší odpověď

0

Přišel jsem s nápadem, jak to udělat. To bude muset být přizpůsobeny, aby se vešly vaše konkrétní userform, ale obecná struktura můj nápad by měl být vhodný.

Mám výchozí hodnoty Userform a TextBox uloženy během UserForm_Initialize akce. Pak během jakékoliv TextBox_Enter nebo TextBox_Change události UserForm se podívat, jestli je třeba změnit velikost pole, aby se vešly nový obsah. Pak během TextBox_Exit události UserForm a Rámeček se vrátí na výchozí velikost.

Toto je kód modulu mého UserForm:

Private USERFORM_DEFAULT_HEIGHT As Integer
Private USERFORM_DEFAULT_WIDTH As Integer
Private TEXTBOX1_DEFAULT_HEIGHT As Integer
Private TEXTBOX1_DEFAULT_WIDTH As Integer

Private Sub UserForm_Initialize()
    USERFORM_DEFAULT_HEIGHT = Me.Height
    USERFORM_DEFAULT_WIDTH = Me.Width
    TEXTBOX1_DEFAULT_HEIGHT = Me.TextBox1.Height
    TEXTBOX1_DEFAULT_WIDTH = Me.TextBox1.Width
End Sub

Private Sub TextBox1_Change()
    If Me.ActiveControl Is Me.TextBox1 Then Resize_To_Contents Me.TextBox1
End Sub

Private Sub TextBox1_Enter()
    Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.UserForm1.Resize_To_Contents(UserForm1.TextBox1)"
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Me.TextBox1.Height = TEXTBOX1_DEFAULT_HEIGHT
    Me.TextBox1.Width = TEXTBOX1_DEFAULT_WIDTH
    Me.Height = USERFORM_DEFAULT_HEIGHT
    Me.Width = USERFORM_DEFAULT_WIDTH
End Sub

Public Sub Resize_To_Contents(TB As Object)
    Dim NewHeight As Integer
    Dim NewWidth As Integer

    If Not TB.WordWrap Then
        NewWidth = Len(TB.Text) * 5 + 4 'this fit my screen and default font size, you may need to adjust it.
    Else
        NewWidth = TB.Width
    End If
    
    NewHeight = TB.LineCount * 10.6 'this fit my screen and default font size, you may need to adjust it.
    
    If NewHeight > TB.Height Then
        Me.Height = Me.Height + NewHeight - TB.Height
        TB.Height = NewHeight
    End If
    
    If NewWidth > TB.Width Then
        Me.Width = Me.Width + NewWidth - TB.Width
        TB.Width = NewWidth
    End If
End Sub

Důvodem pro to, Application.OnTime je to proto, LineCount vyžaduje textového pole se Soustředit, což se nestává až poté, co akce skončí. Tak jsem říct, skript počkejte 1 sekundu a pak spustit, takže to, že Textové pole bude mít zaměření a můžu použít LineCount.

2021-11-19 21:11:28

Já bych dodal k použití Kurýrní typ písma, jako je mono-rozložené (každý znak má stejnou rozteč) tak to dělá to snadné vypočítat šířku. Není to nejhezčí písmo, ale bude dělat svou práci lépe, než jakékoliv jiné písmo.
Simon

Existuje způsob, jak se rozšířené textové pole uložit sám nad ostatní textová pole pod dočasně, dokud zaměření se změnilo? Například textbox2 by být přímo pod textovepole1 a v současné době tato metoda funguje pro zvětšení a při ostření se změní zmenší zpět do výchozí velikosti, ale při psaní se dlouho odpověď řeže do textbox2 s textbox2 překrytím přes text zadaný v textbox1.
2acb_John_Suren

@2acb_John_Suren Když Textové pole získá zaměření, použití Me.TextBox1.ZOrder fmTop. Když to ztratí fokus, vytáhnout další aktivní tvar na vrchol, v případě potřeby.
Toddleson

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................