Yazdıkça Genişleyen Textbox
- 5 sene önce, Ceyhun TOPÇUOĞLU tarafından yazılmıştır.
- 2 Yorum
- Genel,Visual Programlama
Bugünlerde yazdığım bir programda girilen kelimenin uzunluğu kadar bir textbox’a ihtiyaç duydum bazı sitelerde ve msdn forumlarında bulduğum kaynaklar textbox’un font büyüklüğünü alarak bir katsayıyla çarpıp texti genişletiyordu. Fakat bu yöntemde boşluk ( space tuşu ) ve bazı özel karakterlerde tam boyutlandırma yapılmadığını gördüm. Hele ki birbirinin boyutlarını hiç tutmayan fontlarda hiçbir sonuç alamadım. Vb.net ve c# tabanlı dillerde genişlik basit bir şekilde inşa edilebiliyor ama VisualBasic 6 da böyle hazır bişey söz konusu değil. Konu VB6 olunca alternatif yöntemlere başvurmaktan başka çare bulamadım.Açıklamaları takip ederseniz mantığını kavrayacağınıza eminim Uzatmadan kaynak kodlara geçelim. Kullanılan Nesneler : 1 Adet Text(Text1) 1 Adet Picture(Picture1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
''**************************************************************** '* Name : Genişleyen Textbox * '* Author : Ceyhun TOPÇUOĞLU * '* Notice : Harf genişliğine göre boyutlanan Textbox * '* Date : 02.04.2014 * '* Version : 1.0 * '* Website : www.ceyhuntopcuoglu.com * '**************************************************************** Sub UzunlukHesapla(Nesne As Control) Picture1.Cls ' Pictureyi temizle Picture1.CurrentX = 0 ' Picture x kordinatını sıfırla Picture1.CurrentY = 0 ' Picture y kordinatını sıfırla Picture1.Font = Text1.Font ' Pictureyi Textin Fontuyla aynı yapıyor. Picture1.FontSize = Text1.FontSize ' Picturenin textin Font Boyutuyla aynı yapıyor. Picture1.FontItalic = Text1.FontItalic ' Picturenin textin Font yatıklığıyla aynı yapıyor. Picture1.FontBold = Text1.FontBold ' Picturenin textin Font kalınlığıyla aynı yapıyor. Picture1.Print (Nesne.Text); ' Picture nesnesine text içeriğini yazıyor Nesne.Width = Picture1.CurrentX + 120 ' Picturenin birdahaki çizimi nerden başlıyacağı bilgisi alınıyor. ' Üzerine 120 ekledim bu sadece imlecin yanıp söndüğü alanıda genişletmesi için değiştirebilirsiniz. Nesne.Height = (Picture1.FontSize + 1) * 25 ' Genişliği ayarlıyor Nesne.SelStart = 0 'İmlecin içeride yanıp sönmesi textte kaymaya neden oluyor imleci en başa döndürüyoruz. Nesne.SelStart = Len(Nesne) ' İmleci kelimeye devam edilmesi için en sona döndürüyoruz. End Sub Private Sub Form_Load() Picture1.Visible = False ' Boyutlandırmanın yapılacağı Picture Nesnesini Gizliyoruz Call UzunlukHesapla(Text1) ' Text1'i kelime sayısına göre boyutlandırıyoruz ( Açılış ) End Sub Private Sub Text1_Change() Call UzunlukHesapla(Text1) ' Text1'i kelime sayısına göre boyutlandırıyoruz ( Texte Harf Girilince ) End Sub |
bunu vb.net 2010 da nasıl yapabilirim?
bunu yapmana gerek yok vb.net’de CreateGraphics kütüphanesinin MeasureString metoduyla çok basit bir şekilde yapılabiliyor örnek kod :
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim w As Integer = TextBox1.CreateGraphics().MeasureString(TextBox1.Text.Trim, TextBox1.Font, Me.Width).Width
If w > 50 Then TextBox1.Width = w + 10
’50 textbox’ın baştaki genişliği
’10 sabit bir boşluk olması için imlecin yanıp sönmesi için gereken alan
End Sub